diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index 4596b59200..8d9565ad5f 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -1,7 +1,9 @@
 {
   "name": "ESPHome Dev",
   "image": "ghcr.io/esphome/esphome-lint:dev",
-  "postCreateCommand": ["script/devcontainer-post-create"],
+  "postCreateCommand": [
+    "script/devcontainer-post-create"
+  ],
   "containerEnv": {
     "DEVCONTAINER": "1",
     "PIP_BREAK_SYSTEM_PACKAGES": "1",
@@ -27,6 +29,9 @@
       "extensions": [
         // python
         "ms-python.python",
+        "ms-python.pylint",
+        "ms-python.flake8",
+        "ms-python.black-formatter",
         "visualstudioexptteam.vscodeintellicode",
         // yaml
         "redhat.vscode-yaml",
@@ -38,9 +43,21 @@
       "settings": {
         "python.languageServer": "Pylance",
         "python.pythonPath": "/usr/bin/python3",
-        "python.linting.pylintEnabled": true,
-        "python.linting.enabled": true,
-        "python.formatting.provider": "black",
+        "pylint.args": [
+          "--rcfile=${workspaceFolder}/pyproject.toml"
+        ],
+        "flake8.args": [
+          "--config=${workspaceFolder}/.flake8"
+        ],
+        "black-formatter.args": [
+          "--config",
+          "${workspaceFolder}/pyproject.toml"
+        ],
+        "[python]": {
+          // VS will say "Value is not accepted" before building the devcontainer, but the warning
+          // should go away after build is completed.
+          "editor.defaultFormatter": "ms-python.black-formatter"
+        },
         "editor.formatOnPaste": false,
         "editor.formatOnSave": true,
         "editor.formatOnType": true,
diff --git a/.github/actions/build-image/action.yaml b/.github/actions/build-image/action.yaml
index d792ab5f4c..d5baf339aa 100644
--- a/.github/actions/build-image/action.yaml
+++ b/.github/actions/build-image/action.yaml
@@ -46,7 +46,7 @@ runs:
 
     - name: Build and push to ghcr by digest
       id: build-ghcr
-      uses: docker/build-push-action@v5.4.0
+      uses: docker/build-push-action@v6.3.0
       with:
         context: .
         file: ./docker/Dockerfile
@@ -69,7 +69,7 @@ runs:
 
     - name: Build and push to dockerhub by digest
       id: build-dockerhub
-      uses: docker/build-push-action@v5.4.0
+      uses: docker/build-push-action@v6.3.0
       with:
         context: .
         file: ./docker/Dockerfile
diff --git a/.github/actions/restore-python/action.yml b/.github/actions/restore-python/action.yml
index 4ad9e2eaed..d3fe2a89dc 100644
--- a/.github/actions/restore-python/action.yml
+++ b/.github/actions/restore-python/action.yml
@@ -17,7 +17,7 @@ runs:
   steps:
     - name: Set up Python ${{ inputs.python-version }}
       id: python
-      uses: actions/setup-python@v5.1.0
+      uses: actions/setup-python@v5.1.1
       with:
         python-version: ${{ inputs.python-version }}
     - name: Restore Python virtual environment
diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml
index 421a885f74..147efe089e 100644
--- a/.github/workflows/ci-docker.yml
+++ b/.github/workflows/ci-docker.yml
@@ -46,9 +46,9 @@ jobs:
         with:
           python-version: "3.9"
       - name: Set up Docker Buildx
-        uses: docker/setup-buildx-action@v3.3.0
+        uses: docker/setup-buildx-action@v3.4.0
       - name: Set up QEMU
-        uses: docker/setup-qemu-action@v3.0.0
+        uses: docker/setup-qemu-action@v3.1.0
 
       - name: Set TAG
         run: |
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index df7a9178e1..45fe336d77 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -248,72 +248,6 @@ jobs:
         run: script/ci-suggest-changes
         if: always()
 
-  compile-tests-list:
-    runs-on: ubuntu-latest
-    outputs:
-      matrix: ${{ steps.set-matrix.outputs.matrix }}
-    steps:
-      - name: Check out code from GitHub
-        uses: actions/checkout@v4.1.7
-      - name: Find all YAML test files
-        id: set-matrix
-        run: echo "matrix=$(ls tests/test*.yaml | jq -R -s -c 'split("\n")[:-1]')" >> $GITHUB_OUTPUT
-
-  validate-tests:
-    name: Validate YAML test ${{ matrix.file }}
-    runs-on: ubuntu-latest
-    needs:
-      - common
-      - compile-tests-list
-    strategy:
-      fail-fast: false
-      matrix:
-        file: ${{ fromJson(needs.compile-tests-list.outputs.matrix) }}
-    steps:
-      - name: Check out code from GitHub
-        uses: actions/checkout@v4.1.7
-      - name: Restore Python
-        uses: ./.github/actions/restore-python
-        with:
-          python-version: ${{ env.DEFAULT_PYTHON }}
-          cache-key: ${{ needs.common.outputs.cache-key }}
-      - name: Run esphome config ${{ matrix.file }}
-        run: |
-          . venv/bin/activate
-          esphome config ${{ matrix.file }}
-
-  compile-tests:
-    name: Run YAML test ${{ matrix.file }}
-    runs-on: ubuntu-latest
-    needs:
-      - common
-      - black
-      - ci-custom
-      - clang-format
-      - flake8
-      - pylint
-      - pytest
-      - pyupgrade
-      - compile-tests-list
-      - validate-tests
-    strategy:
-      fail-fast: false
-      max-parallel: 2
-      matrix:
-        file: ${{ fromJson(needs.compile-tests-list.outputs.matrix) }}
-    steps:
-      - name: Check out code from GitHub
-        uses: actions/checkout@v4.1.7
-      - name: Restore Python
-        uses: ./.github/actions/restore-python
-        with:
-          python-version: ${{ env.DEFAULT_PYTHON }}
-          cache-key: ${{ needs.common.outputs.cache-key }}
-      - name: Run esphome compile ${{ matrix.file }}
-        run: |
-          . venv/bin/activate
-          esphome compile ${{ matrix.file }}
-
   clang-tidy:
     name: ${{ matrix.name }}
     runs-on: ubuntu-latest
@@ -550,7 +484,6 @@ jobs:
       - pylint
       - pytest
       - pyupgrade
-      - compile-tests
       - clang-tidy
       - list-components
       - test-build-components
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 9c07335104..f66c504bda 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -65,7 +65,7 @@ jobs:
           pip3 install build
           python3 -m build
       - name: Publish
-        uses: pypa/gh-action-pypi-publish@v1.8.14
+        uses: pypa/gh-action-pypi-publish@v1.9.0
 
   deploy-docker:
     name: Build ESPHome ${{ matrix.platform }}
@@ -90,10 +90,10 @@ jobs:
           python-version: "3.9"
 
       - name: Set up Docker Buildx
-        uses: docker/setup-buildx-action@v3.3.0
+        uses: docker/setup-buildx-action@v3.4.0
       - name: Set up QEMU
         if: matrix.platform != 'linux/amd64'
-        uses: docker/setup-qemu-action@v3.0.0
+        uses: docker/setup-qemu-action@v3.1.0
 
       - name: Log in to docker hub
         uses: docker/login-action@v3.2.0
@@ -141,7 +141,7 @@ jobs:
           echo name=$(cat /tmp/platform) >> $GITHUB_OUTPUT
 
       - name: Upload digests
-        uses: actions/upload-artifact@v4.3.3
+        uses: actions/upload-artifact@v4.3.4
         with:
           name: digests-${{ steps.sanitize.outputs.name }}
           path: /tmp/digests
@@ -177,14 +177,14 @@ jobs:
       - uses: actions/checkout@v4.1.7
 
       - name: Download digests
-        uses: actions/download-artifact@v4.1.7
+        uses: actions/download-artifact@v4.1.8
         with:
           pattern: digests-*
           path: /tmp/digests
           merge-multiple: true
 
       - name: Set up Docker Buildx
-        uses: docker/setup-buildx-action@v3.3.0
+        uses: docker/setup-buildx-action@v3.4.0
 
       - name: Log in to docker hub
         if: matrix.registry == 'dockerhub'
diff --git a/.github/workflows/sync-device-classes.yml b/.github/workflows/sync-device-classes.yml
index 45f6b27127..89a3627c64 100644
--- a/.github/workflows/sync-device-classes.yml
+++ b/.github/workflows/sync-device-classes.yml
@@ -36,7 +36,7 @@ jobs:
           python ./script/sync-device_class.py
 
       - name: Commit changes
-        uses: peter-evans/create-pull-request@v6.0.5
+        uses: peter-evans/create-pull-request@v6.1.0
         with:
           commit-message: "Synchronise Device Classes from Home Assistant"
           committer: esphomebot <esphome@nabucasa.com>
diff --git a/CODEOWNERS b/CODEOWNERS
index 00904a3a5d..784061b007 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -214,7 +214,7 @@ esphome/components/lightwaverf/* @max246
 esphome/components/lilygo_t5_47/touchscreen/* @jesserockz
 esphome/components/lock/* @esphome/core
 esphome/components/logger/* @esphome/core
-esphome/components/ltr390/* @sjtrny
+esphome/components/ltr390/* @latonita @sjtrny
 esphome/components/ltr_als_ps/* @latonita
 esphome/components/matrix_keypad/* @ssieb
 esphome/components/max31865/* @DAVe3283
diff --git a/docker/Dockerfile b/docker/Dockerfile
index fcb5a5e7ae..16f37274c6 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -34,28 +34,32 @@ RUN \
         python3-wheel=0.38.4-2 \
         iputils-ping=3:20221126-1 \
         git=1:2.39.2-1.1 \
-        curl=7.88.1-10+deb12u5 \
+        curl=7.88.1-10+deb12u6 \
         openssh-client=1:9.2p1-2+deb12u2 \
         python3-cffi=1.15.1-5 \
         libcairo2=1.16.0-7 \
         libmagic1=1:5.44-3 \
-        patch=2.7.6-7; \
-    if [ "$TARGETARCH$TARGETVARIANT" = "armv7" ]; then \
-        apt-get install -y --no-install-recommends \
-          build-essential=12.9 \
-          python3-dev=3.11.2-1+b1 \
-          zlib1g-dev=1:1.2.13.dfsg-1 \
-          libjpeg-dev=1:2.1.5-2 \
-          libfreetype-dev=2.12.1+dfsg-5 \
-          libssl-dev=3.0.11-1~deb12u2 \
-          libffi-dev=3.4.4-1 \
-          libopenjp2-7=2.5.0-2 \
-          libtiff6=4.5.0-6+deb12u1 \
-          cargo=0.66.0+ds1-1 \
-          pkg-config=1.8.1-1 \
-          gcc-arm-linux-gnueabihf=4:12.2.0-3; \
-    fi; \
-    rm -rf \
+        patch=2.7.6-7 \
+    && ( \
+        ( \
+            [ "$TARGETARCH$TARGETVARIANT" = "armv7" ] && \
+                apt-get install -y --no-install-recommends \
+                build-essential=12.9 \
+                python3-dev=3.11.2-1+b1 \
+                zlib1g-dev=1:1.2.13.dfsg-1 \
+                libjpeg-dev=1:2.1.5-2 \
+                libfreetype-dev=2.12.1+dfsg-5+deb12u3 \
+                libssl-dev=3.0.13-1~deb12u1 \
+                libffi-dev=3.4.4-1 \
+                libopenjp2-7=2.5.0-2 \
+                libtiff6=4.5.0-6+deb12u1 \
+                cargo=0.66.0+ds1-1 \
+                pkg-config=1.8.1-1 \
+                gcc-arm-linux-gnueabihf=4:12.2.0-3 \
+        ) \
+        || [ "$TARGETARCH$TARGETVARIANT" != "armv7" ] \
+    ) \
+    && rm -rf \
         /tmp/* \
         /var/{cache,log}/* \
         /var/lib/apt/lists/*
@@ -190,8 +194,8 @@ RUN \
         clang-format-13=1:13.0.1-11+b2 \
         clang-tidy-14=1:14.0.6-12 \
         patch=2.7.6-7 \
-        software-properties-common=0.99.30-4 \
-        nano=7.2-1 \
+        software-properties-common=0.99.30-4.1~deb12u1 \
+        nano=7.2-1+deb12u1 \
         build-essential=12.9 \
         python3-dev=3.11.2-1+b1 \
     && rm -rf \
diff --git a/esphome/codegen.py b/esphome/codegen.py
index b552490129..6b000b53a1 100644
--- a/esphome/codegen.py
+++ b/esphome/codegen.py
@@ -60,6 +60,7 @@ from esphome.cpp_types import (  # noqa
     std_ns,
     std_shared_ptr,
     std_string,
+    std_string_ref,
     std_vector,
     uint8,
     uint16,
diff --git a/esphome/components/aht10/aht10.cpp b/esphome/components/aht10/aht10.cpp
index 332218b9e9..441c1ac9df 100644
--- a/esphome/components/aht10/aht10.cpp
+++ b/esphome/components/aht10/aht10.cpp
@@ -93,8 +93,9 @@ void AHT10Component::restart_read_() {
 
 void AHT10Component::read_data_() {
   uint8_t data[6];
-  if (this->read_count_ > 1)
+  if (this->read_count_ > 1) {
     ESP_LOGD(TAG, "Read attempt %d at %ums", this->read_count_, (unsigned) (millis() - this->start_time_));
+  }
   if (this->read(data, 6) != i2c::ERROR_OK) {
     this->status_set_warning("AHT10 read failed, retrying soon");
     this->restart_read_();
@@ -119,8 +120,9 @@ void AHT10Component::read_data_() {
       return;
     }
   }
-  if (this->read_count_ > 1)
+  if (this->read_count_ > 1) {
     ESP_LOGD(TAG, "Success at %ums", (unsigned) (millis() - this->start_time_));
+  }
   uint32_t raw_temperature = ((data[3] & 0x0F) << 16) | (data[4] << 8) | data[5];
   uint32_t raw_humidity = ((data[1] << 16) | (data[2] << 8) | data[3]) >> 4;
 
diff --git a/esphome/components/bme680_bsec/__init__.py b/esphome/components/bme680_bsec/__init__.py
index 62ab50b8f7..743ef6e85d 100644
--- a/esphome/components/bme680_bsec/__init__.py
+++ b/esphome/components/bme680_bsec/__init__.py
@@ -1,7 +1,7 @@
 import esphome.codegen as cg
 import esphome.config_validation as cv
 from esphome.components import i2c, esp32
-from esphome.const import CONF_ID, CONF_TEMPERATURE_OFFSET
+from esphome.const import CONF_ID, CONF_SAMPLE_RATE, CONF_TEMPERATURE_OFFSET
 
 CODEOWNERS = ["@trvrnrth"]
 DEPENDENCIES = ["i2c"]
@@ -11,7 +11,6 @@ MULTI_CONF = True
 CONF_BME680_BSEC_ID = "bme680_bsec_id"
 CONF_IAQ_MODE = "iaq_mode"
 CONF_SUPPLY_VOLTAGE = "supply_voltage"
-CONF_SAMPLE_RATE = "sample_rate"
 CONF_STATE_SAVE_INTERVAL = "state_save_interval"
 
 bme680_bsec_ns = cg.esphome_ns.namespace("bme680_bsec")
diff --git a/esphome/components/bme680_bsec/sensor.py b/esphome/components/bme680_bsec/sensor.py
index 43b068b926..aa96998232 100644
--- a/esphome/components/bme680_bsec/sensor.py
+++ b/esphome/components/bme680_bsec/sensor.py
@@ -4,33 +4,33 @@ from esphome.components import sensor
 from esphome.const import (
     CONF_GAS_RESISTANCE,
     CONF_HUMIDITY,
+    CONF_IAQ_ACCURACY,
     CONF_PRESSURE,
+    CONF_SAMPLE_RATE,
     CONF_TEMPERATURE,
+    DEVICE_CLASS_ATMOSPHERIC_PRESSURE,
     DEVICE_CLASS_CARBON_DIOXIDE,
     DEVICE_CLASS_HUMIDITY,
-    DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS_PARTS,
-    DEVICE_CLASS_ATMOSPHERIC_PRESSURE,
     DEVICE_CLASS_TEMPERATURE,
+    DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS_PARTS,
+    ICON_GAS_CYLINDER,
+    ICON_GAUGE,
     STATE_CLASS_MEASUREMENT,
     UNIT_CELSIUS,
     UNIT_HECTOPASCAL,
     UNIT_OHM,
     UNIT_PARTS_PER_MILLION,
     UNIT_PERCENT,
-    ICON_GAS_CYLINDER,
-    ICON_GAUGE,
 )
 from . import (
     BME680BSECComponent,
     CONF_BME680_BSEC_ID,
-    CONF_SAMPLE_RATE,
     SAMPLE_RATE_OPTIONS,
 )
 
 DEPENDENCIES = ["bme680_bsec"]
 
 CONF_IAQ = "iaq"
-CONF_IAQ_ACCURACY = "iaq_accuracy"
 CONF_CO2_EQUIVALENT = "co2_equivalent"
 CONF_BREATH_VOC_EQUIVALENT = "breath_voc_equivalent"
 UNIT_IAQ = "IAQ"
diff --git a/esphome/components/bme680_bsec/text_sensor.py b/esphome/components/bme680_bsec/text_sensor.py
index 3494ba0cac..6b46e501da 100644
--- a/esphome/components/bme680_bsec/text_sensor.py
+++ b/esphome/components/bme680_bsec/text_sensor.py
@@ -1,11 +1,11 @@
 import esphome.codegen as cg
 import esphome.config_validation as cv
 from esphome.components import text_sensor
+from esphome.const import CONF_IAQ_ACCURACY
 from . import BME680BSECComponent, CONF_BME680_BSEC_ID
 
 DEPENDENCIES = ["bme680_bsec"]
 
-CONF_IAQ_ACCURACY = "iaq_accuracy"
 ICON_ACCURACY = "mdi:checkbox-marked-circle-outline"
 
 TYPES = [CONF_IAQ_ACCURACY]
diff --git a/esphome/components/climate/climate.cpp b/esphome/components/climate/climate.cpp
index 1822707152..bc8d932089 100644
--- a/esphome/components/climate/climate.cpp
+++ b/esphome/components/climate/climate.cpp
@@ -574,21 +574,25 @@ void Climate::dump_traits_(const char *tag) {
   ESP_LOGCONFIG(tag, "      - Max temperature: %.1f", traits.get_visual_max_temperature());
   ESP_LOGCONFIG(tag, "      - Temperature step:");
   ESP_LOGCONFIG(tag, "          Target: %.1f", traits.get_visual_target_temperature_step());
-  ESP_LOGCONFIG(tag, "          Current: %.1f", traits.get_visual_current_temperature_step());
-  ESP_LOGCONFIG(tag, "      - Min humidity: %.0f", traits.get_visual_min_humidity());
-  ESP_LOGCONFIG(tag, "      - Max humidity: %.0f", traits.get_visual_max_humidity());
   if (traits.get_supports_current_temperature()) {
-    ESP_LOGCONFIG(tag, "  [x] Supports current temperature");
+    ESP_LOGCONFIG(tag, "          Current: %.1f", traits.get_visual_current_temperature_step());
   }
-  if (traits.get_supports_current_humidity()) {
-    ESP_LOGCONFIG(tag, "  [x] Supports current humidity");
+  if (traits.get_supports_target_humidity() || traits.get_supports_current_humidity()) {
+    ESP_LOGCONFIG(tag, "      - Min humidity: %.0f", traits.get_visual_min_humidity());
+    ESP_LOGCONFIG(tag, "      - Max humidity: %.0f", traits.get_visual_max_humidity());
   }
   if (traits.get_supports_two_point_target_temperature()) {
     ESP_LOGCONFIG(tag, "  [x] Supports two-point target temperature");
   }
+  if (traits.get_supports_current_temperature()) {
+    ESP_LOGCONFIG(tag, "  [x] Supports current temperature");
+  }
   if (traits.get_supports_target_humidity()) {
     ESP_LOGCONFIG(tag, "  [x] Supports target humidity");
   }
+  if (traits.get_supports_current_humidity()) {
+    ESP_LOGCONFIG(tag, "  [x] Supports current humidity");
+  }
   if (traits.get_supports_action()) {
     ESP_LOGCONFIG(tag, "  [x] Supports action");
   }
diff --git a/esphome/components/climate/climate_traits.h b/esphome/components/climate/climate_traits.h
index fd5b025a03..58d7b586d7 100644
--- a/esphome/components/climate/climate_traits.h
+++ b/esphome/components/climate/climate_traits.h
@@ -73,7 +73,7 @@ class ClimateTraits {
   ESPDEPRECATED("This method is deprecated, use set_supported_modes() instead", "v1.20")
   void set_supports_dry_mode(bool supports_dry_mode) { set_mode_support_(CLIMATE_MODE_DRY, supports_dry_mode); }
   bool supports_mode(ClimateMode mode) const { return supported_modes_.count(mode); }
-  std::set<ClimateMode> get_supported_modes() const { return supported_modes_; }
+  const std::set<ClimateMode> &get_supported_modes() const { return supported_modes_; }
 
   void set_supports_action(bool supports_action) { supports_action_ = supports_action; }
   bool get_supports_action() const { return supports_action_; }
@@ -101,7 +101,7 @@ class ClimateTraits {
   void set_supports_fan_mode_diffuse(bool supported) { set_fan_mode_support_(CLIMATE_FAN_DIFFUSE, supported); }
   bool supports_fan_mode(ClimateFanMode fan_mode) const { return supported_fan_modes_.count(fan_mode); }
   bool get_supports_fan_modes() const { return !supported_fan_modes_.empty() || !supported_custom_fan_modes_.empty(); }
-  std::set<ClimateFanMode> get_supported_fan_modes() const { return supported_fan_modes_; }
+  const std::set<ClimateFanMode> &get_supported_fan_modes() const { return supported_fan_modes_; }
 
   void set_supported_custom_fan_modes(std::set<std::string> supported_custom_fan_modes) {
     supported_custom_fan_modes_ = std::move(supported_custom_fan_modes);
@@ -140,7 +140,7 @@ class ClimateTraits {
   }
   bool supports_swing_mode(ClimateSwingMode swing_mode) const { return supported_swing_modes_.count(swing_mode); }
   bool get_supports_swing_modes() const { return !supported_swing_modes_.empty(); }
-  std::set<ClimateSwingMode> get_supported_swing_modes() const { return supported_swing_modes_; }
+  const std::set<ClimateSwingMode> &get_supported_swing_modes() const { return supported_swing_modes_; }
 
   float get_visual_min_temperature() const { return visual_min_temperature_; }
   void set_visual_min_temperature(float visual_min_temperature) { visual_min_temperature_ = visual_min_temperature; }
diff --git a/esphome/components/cover/cover.h b/esphome/components/cover/cover.h
index 89598a9636..8b6f5b8a72 100644
--- a/esphome/components/cover/cover.h
+++ b/esphome/components/cover/cover.h
@@ -129,13 +129,13 @@ class Cover : public EntityBase, public EntityBase_DeviceClass {
    *
    * This is a legacy method and may be removed later, please use `.make_call()` instead.
    */
-  ESPDEPRECATED("open() is deprecated, use make_call().set_command_open() instead.", "2021.9")
+  ESPDEPRECATED("open() is deprecated, use make_call().set_command_open().perform() instead.", "2021.9")
   void open();
   /** Close the cover.
    *
    * This is a legacy method and may be removed later, please use `.make_call()` instead.
    */
-  ESPDEPRECATED("close() is deprecated, use make_call().set_command_close() instead.", "2021.9")
+  ESPDEPRECATED("close() is deprecated, use make_call().set_command_close().perform() instead.", "2021.9")
   void close();
   /** Stop the cover.
    *
diff --git a/esphome/components/dallas_temp/dallas_temp.cpp b/esphome/components/dallas_temp/dallas_temp.cpp
index fe7c9a95ea..ae567d6a76 100644
--- a/esphome/components/dallas_temp/dallas_temp.cpp
+++ b/esphome/components/dallas_temp/dallas_temp.cpp
@@ -145,24 +145,21 @@ bool DallasTemperatureSensor::check_scratch_pad_() {
 float DallasTemperatureSensor::get_temp_c_() {
   int16_t temp = (this->scratch_pad_[1] << 8) | this->scratch_pad_[0];
   if ((this->address_ & 0xff) == DALLAS_MODEL_DS18S20) {
-    if (this->scratch_pad_[7] != 0x10)
-      ESP_LOGE(TAG, "unexpected COUNT_PER_C value: %u", this->scratch_pad_[7]);
-    temp = ((temp & 0xfff7) << 3) + (0x10 - this->scratch_pad_[6]) - 4;
-  } else {
-    switch (this->resolution_) {
-      case 9:
-        temp &= 0xfff8;
-        break;
-      case 10:
-        temp &= 0xfffc;
-        break;
-      case 11:
-        temp &= 0xfffe;
-        break;
-      case 12:
-      default:
-        break;
-    }
+    return (temp >> 1) + (this->scratch_pad_[7] - this->scratch_pad_[6]) / float(this->scratch_pad_[7]) - 0.25;
+  }
+  switch (this->resolution_) {
+    case 9:
+      temp &= 0xfff8;
+      break;
+    case 10:
+      temp &= 0xfffc;
+      break;
+    case 11:
+      temp &= 0xfffe;
+      break;
+    case 12:
+    default:
+      break;
   }
 
   return temp / 16.0f;
diff --git a/esphome/components/debug/debug_libretiny.cpp b/esphome/components/debug/debug_libretiny.cpp
index c3418cf96c..b5e2a5b310 100644
--- a/esphome/components/debug/debug_libretiny.cpp
+++ b/esphome/components/debug/debug_libretiny.cpp
@@ -12,7 +12,7 @@ std::string DebugComponent::get_reset_reason_() { return lt_get_reboot_reason_na
 uint32_t DebugComponent::get_free_heap_() { return lt_heap_get_free(); }
 
 void DebugComponent::get_device_info_(std::string &device_info) {
-  str::string reset_reason = get_reset_reason_();
+  std::string reset_reason = get_reset_reason_();
   ESP_LOGD(TAG, "LibreTiny Version: %s", lt_get_version());
   ESP_LOGD(TAG, "Chip: %s (%04x) @ %u MHz", lt_cpu_get_model_name(), lt_cpu_get_model(), lt_cpu_get_freq_mhz());
   ESP_LOGD(TAG, "Chip ID: 0x%06X", lt_cpu_get_mac_id());
diff --git a/esphome/components/ds1307/ds1307.cpp b/esphome/components/ds1307/ds1307.cpp
index 472ccc7a9a..9df8a1d373 100644
--- a/esphome/components/ds1307/ds1307.cpp
+++ b/esphome/components/ds1307/ds1307.cpp
@@ -37,14 +37,18 @@ void DS1307Component::read_time() {
     ESP_LOGW(TAG, "RTC halted, not syncing to system clock.");
     return;
   }
-  ESPTime rtc_time{.second = uint8_t(ds1307_.reg.second + 10 * ds1307_.reg.second_10),
-                   .minute = uint8_t(ds1307_.reg.minute + 10u * ds1307_.reg.minute_10),
-                   .hour = uint8_t(ds1307_.reg.hour + 10u * ds1307_.reg.hour_10),
-                   .day_of_week = uint8_t(ds1307_.reg.weekday),
-                   .day_of_month = uint8_t(ds1307_.reg.day + 10u * ds1307_.reg.day_10),
-                   .day_of_year = 1,  // ignored by recalc_timestamp_utc(false)
-                   .month = uint8_t(ds1307_.reg.month + 10u * ds1307_.reg.month_10),
-                   .year = uint16_t(ds1307_.reg.year + 10u * ds1307_.reg.year_10 + 2000)};
+  ESPTime rtc_time{
+      .second = uint8_t(ds1307_.reg.second + 10 * ds1307_.reg.second_10),
+      .minute = uint8_t(ds1307_.reg.minute + 10u * ds1307_.reg.minute_10),
+      .hour = uint8_t(ds1307_.reg.hour + 10u * ds1307_.reg.hour_10),
+      .day_of_week = uint8_t(ds1307_.reg.weekday),
+      .day_of_month = uint8_t(ds1307_.reg.day + 10u * ds1307_.reg.day_10),
+      .day_of_year = 1,  // ignored by recalc_timestamp_utc(false)
+      .month = uint8_t(ds1307_.reg.month + 10u * ds1307_.reg.month_10),
+      .year = uint16_t(ds1307_.reg.year + 10u * ds1307_.reg.year_10 + 2000),
+      .is_dst = false,  // not used
+      .timestamp = 0    // overwritten by recalc_timestamp_utc(false)
+  };
   rtc_time.recalc_timestamp_utc(false);
   if (!rtc_time.is_valid()) {
     ESP_LOGE(TAG, "Invalid RTC time, not syncing to system clock.");
diff --git a/esphome/components/esp32/__init__.py b/esphome/components/esp32/__init__.py
index 8f46567266..1effea708f 100644
--- a/esphome/components/esp32/__init__.py
+++ b/esphome/components/esp32/__init__.py
@@ -96,16 +96,16 @@ def get_board(core_obj=None):
 def get_download_types(storage_json):
     return [
         {
-            "title": "Modern format",
+            "title": "Factory format (Previously Modern)",
             "description": "For use with ESPHome Web and other tools.",
-            "file": "firmware-factory.bin",
-            "download": f"{storage_json.name}-factory.bin",
+            "file": "firmware.factory.bin",
+            "download": f"{storage_json.name}.factory.bin",
         },
         {
-            "title": "Legacy format",
-            "description": "For use with ESPHome Flasher.",
-            "file": "firmware.bin",
-            "download": f"{storage_json.name}.bin",
+            "title": "OTA format (Previously Legacy)",
+            "description": "For OTA updating a device.",
+            "file": "firmware.ota.bin",
+            "download": f"{storage_json.name}.ota.bin",
         },
     ]
 
diff --git a/esphome/components/esp32/post_build.py.script b/esphome/components/esp32/post_build.py.script
index c941bdb386..c181cf30b1 100644
--- a/esphome/components/esp32/post_build.py.script
+++ b/esphome/components/esp32/post_build.py.script
@@ -17,17 +17,19 @@ from SCons.Script import ARGUMENTS
 
 # Copy over the default sdkconfig.
 from os import path
+
 if path.exists("./sdkconfig.defaults"):
     os.makedirs(".temp", exist_ok=True)
     shutil.copy("./sdkconfig.defaults", "./.temp/sdkconfig-esp32-idf")
 
+
 def esp32_create_combined_bin(source, target, env):
     verbose = bool(int(ARGUMENTS.get("PIOVERBOSE", "0")))
     if verbose:
         print("Generating combined binary for serial flashing")
     app_offset = 0x10000
 
-    new_file_name = env.subst("$BUILD_DIR/${PROGNAME}-factory.bin")
+    new_file_name = env.subst("$BUILD_DIR/${PROGNAME}.factory.bin")
     sections = env.subst(env.get("FLASH_EXTRA_IMAGES"))
     firmware_name = env.subst("$BUILD_DIR/${PROGNAME}.bin")
     chip = env.get("BOARD_MCU")
@@ -62,5 +64,14 @@ def esp32_create_combined_bin(source, target, env):
     else:
         subprocess.run(["esptool.py", *cmd])
 
+
+def esp32_copy_ota_bin(source, target, env):
+    firmware_name = env.subst("$BUILD_DIR/${PROGNAME}.bin")
+    new_file_name = env.subst("$BUILD_DIR/${PROGNAME}.ota.bin")
+
+    shutil.copyfile(firmware_name, new_file_name)
+
+
 # pylint: disable=E0602
 env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", esp32_create_combined_bin)  # noqa
+env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", esp32_copy_ota_bin)  # noqa
diff --git a/esphome/components/esp32_can/canbus.py b/esphome/components/esp32_can/canbus.py
index 74f331f30b..f4ba032009 100644
--- a/esphome/components/esp32_can/canbus.py
+++ b/esphome/components/esp32_can/canbus.py
@@ -11,6 +11,7 @@ from esphome.components.esp32.const import (
     VARIANT_ESP32S2,
     VARIANT_ESP32S3,
     VARIANT_ESP32C3,
+    VARIANT_ESP32C6,
     VARIANT_ESP32H2,
 )
 
@@ -47,6 +48,7 @@ CAN_SPEEDS_ESP32_S2 = {
 
 CAN_SPEEDS_ESP32_S3 = {**CAN_SPEEDS_ESP32_S2}
 CAN_SPEEDS_ESP32_C3 = {**CAN_SPEEDS_ESP32_S2}
+CAN_SPEEDS_ESP32_C6 = {**CAN_SPEEDS_ESP32_S2}
 CAN_SPEEDS_ESP32_H2 = {**CAN_SPEEDS_ESP32_S2}
 
 CAN_SPEEDS = {
@@ -54,6 +56,7 @@ CAN_SPEEDS = {
     VARIANT_ESP32S2: CAN_SPEEDS_ESP32_S2,
     VARIANT_ESP32S3: CAN_SPEEDS_ESP32_S3,
     VARIANT_ESP32C3: CAN_SPEEDS_ESP32_C3,
+    VARIANT_ESP32C6: CAN_SPEEDS_ESP32_C6,
     VARIANT_ESP32H2: CAN_SPEEDS_ESP32_H2,
 }
 
diff --git a/esphome/components/esp8266/post_build.py.script b/esphome/components/esp8266/post_build.py.script
index 4dab1cbd27..0a854d7599 100644
--- a/esphome/components/esp8266/post_build.py.script
+++ b/esphome/components/esp8266/post_build.py.script
@@ -6,10 +6,18 @@ Import("env")  # noqa
 
 def esp8266_copy_factory_bin(source, target, env):
     firmware_name = env.subst("$BUILD_DIR/${PROGNAME}.bin")
-    new_file_name = env.subst("$BUILD_DIR/${PROGNAME}-factory.bin")
+    new_file_name = env.subst("$BUILD_DIR/${PROGNAME}.factory.bin")
+
+    shutil.copyfile(firmware_name, new_file_name)
+
+
+def esp8266_copy_ota_bin(source, target, env):
+    firmware_name = env.subst("$BUILD_DIR/${PROGNAME}.bin")
+    new_file_name = env.subst("$BUILD_DIR/${PROGNAME}.ota.bin")
 
     shutil.copyfile(firmware_name, new_file_name)
 
 
 # pylint: disable=E0602
 env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", esp8266_copy_factory_bin)  # noqa
+env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", esp8266_copy_ota_bin)  # noqa
diff --git a/esphome/components/esphome/ota/__init__.py b/esphome/components/esphome/ota/__init__.py
index c5903974c2..a852d8d001 100644
--- a/esphome/components/esphome/ota/__init__.py
+++ b/esphome/components/esphome/ota/__init__.py
@@ -1,10 +1,17 @@
+import logging
+
 import esphome.codegen as cg
 import esphome.config_validation as cv
+import esphome.final_validate as fv
 from esphome.components.ota import BASE_OTA_SCHEMA, ota_to_code, OTAComponent
+from esphome.config_helpers import merge_config
 from esphome.const import (
+    CONF_ESPHOME,
     CONF_ID,
     CONF_NUM_ATTEMPTS,
+    CONF_OTA,
     CONF_PASSWORD,
+    CONF_PLATFORM,
     CONF_PORT,
     CONF_REBOOT_TIMEOUT,
     CONF_SAFE_MODE,
@@ -12,6 +19,8 @@ from esphome.const import (
 )
 from esphome.core import coroutine_with_priority
 
+_LOGGER = logging.getLogger(__name__)
+
 
 CODEOWNERS = ["@esphome/core"]
 AUTO_LOAD = ["md5", "socket"]
@@ -21,6 +30,65 @@ esphome = cg.esphome_ns.namespace("esphome")
 ESPHomeOTAComponent = esphome.class_("ESPHomeOTAComponent", OTAComponent)
 
 
+def ota_esphome_final_validate(config):
+    full_conf = fv.full_config.get()
+    full_ota_conf = full_conf[CONF_OTA]
+    new_ota_conf = []
+    merged_ota_esphome_configs_by_port = {}
+    ports_with_merged_configs = []
+    for ota_conf in full_ota_conf:
+        if ota_conf.get(CONF_PLATFORM) == CONF_ESPHOME:
+            if (
+                conf_port := ota_conf.get(CONF_PORT)
+            ) not in merged_ota_esphome_configs_by_port:
+                merged_ota_esphome_configs_by_port[conf_port] = ota_conf
+            else:
+                if merged_ota_esphome_configs_by_port[conf_port][
+                    CONF_VERSION
+                ] != ota_conf.get(CONF_VERSION):
+                    raise cv.Invalid(
+                        f"Found multiple configurations but {CONF_VERSION} is inconsistent"
+                    )
+                if (
+                    merged_ota_esphome_configs_by_port[conf_port][CONF_ID].is_manual
+                    and ota_conf.get(CONF_ID).is_manual
+                ):
+                    raise cv.Invalid(
+                        f"Found multiple configurations but {CONF_ID} is inconsistent"
+                    )
+                if (
+                    CONF_PASSWORD in merged_ota_esphome_configs_by_port[conf_port]
+                    and CONF_PASSWORD in ota_conf
+                    and merged_ota_esphome_configs_by_port[conf_port][CONF_PASSWORD]
+                    != ota_conf.get(CONF_PASSWORD)
+                ):
+                    raise cv.Invalid(
+                        f"Found multiple configurations but {CONF_PASSWORD} is inconsistent"
+                    )
+
+                ports_with_merged_configs.append(conf_port)
+                merged_ota_esphome_configs_by_port[conf_port] = merge_config(
+                    merged_ota_esphome_configs_by_port[conf_port], ota_conf
+                )
+        else:
+            new_ota_conf.append(ota_conf)
+
+    for port_conf in merged_ota_esphome_configs_by_port.values():
+        new_ota_conf.append(port_conf)
+
+    full_conf[CONF_OTA] = new_ota_conf
+    fv.full_config.set(full_conf)
+
+    if len(ports_with_merged_configs) > 0:
+        _LOGGER.warning(
+            "Found and merged multiple configurations for %s %s %s port(s) %s",
+            CONF_OTA,
+            CONF_PLATFORM,
+            CONF_ESPHOME,
+            ports_with_merged_configs,
+        )
+
+
 CONFIG_SCHEMA = (
     cv.Schema(
         {
@@ -50,6 +118,8 @@ CONFIG_SCHEMA = (
     .extend(cv.COMPONENT_SCHEMA)
 )
 
+FINAL_VALIDATE_SCHEMA = ota_esphome_final_validate
+
 
 @coroutine_with_priority(52.0)
 async def to_code(config):
diff --git a/esphome/components/ethernet/ethernet_component.cpp b/esphome/components/ethernet/ethernet_component.cpp
index 75bdd29be7..962a864a29 100644
--- a/esphome/components/ethernet/ethernet_component.cpp
+++ b/esphome/components/ethernet/ethernet_component.cpp
@@ -65,7 +65,8 @@ void EthernetComponent::setup() {
       .intr_flags = 0,
   };
 
-#if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3)
+#if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) || \
+    defined(USE_ESP32_VARIANT_ESP32C6)
   auto host = SPI2_HOST;
 #else
   auto host = SPI3_HOST;
@@ -393,7 +394,7 @@ void EthernetComponent::got_ip_event_handler(void *arg, esp_event_base_t event_b
   const esp_netif_ip_info_t *ip_info = &event->ip_info;
   ESP_LOGV(TAG, "[Ethernet event] ETH Got IP " IPSTR, IP2STR(&ip_info->ip));
   global_eth_component->got_ipv4_address_ = true;
-#if USE_NETWORK_IPV6
+#if USE_NETWORK_IPV6 && (USE_NETWORK_MIN_IPV6_ADDR_COUNT > 0)
   global_eth_component->connected_ = global_eth_component->ipv6_count_ >= USE_NETWORK_MIN_IPV6_ADDR_COUNT;
 #else
   global_eth_component->connected_ = true;
@@ -406,8 +407,12 @@ void EthernetComponent::got_ip6_event_handler(void *arg, esp_event_base_t event_
   ip_event_got_ip6_t *event = (ip_event_got_ip6_t *) event_data;
   ESP_LOGV(TAG, "[Ethernet event] ETH Got IPv6: " IPV6STR, IPV62STR(event->ip6_info.ip));
   global_eth_component->ipv6_count_ += 1;
+#if (USE_NETWORK_MIN_IPV6_ADDR_COUNT > 0)
   global_eth_component->connected_ =
       global_eth_component->got_ipv4_address_ && (global_eth_component->ipv6_count_ >= USE_NETWORK_MIN_IPV6_ADDR_COUNT);
+#else
+  global_eth_component->connected_ = global_eth_component->got_ipv4_address_;
+#endif
 }
 #endif /* USE_NETWORK_IPV6 */
 
@@ -631,7 +636,7 @@ void EthernetComponent::write_phy_register_(esp_eth_mac_t *mac, PHYRegister regi
   ESPHL_ERROR_CHECK(err, "Writing PHY Register failed");
 
   if (this->type_ == ETHERNET_TYPE_RTL8201 && register_data.page) {
-    ESP_LOGD(TAG, "Select PHY Register Page 0x%02" PRIX32, 0x0);
+    ESP_LOGD(TAG, "Select PHY Register Page 0x00");
     err = mac->write_phy_reg(mac, this->phy_addr_, eth_phy_psr_reg_addr, 0x0);
     ESPHL_ERROR_CHECK(err, "Select PHY Register Page 0 failed");
   }
diff --git a/esphome/components/font/__init__.py b/esphome/components/font/__init__.py
index b3a5beb199..7e4674ffda 100644
--- a/esphome/components/font/__init__.py
+++ b/esphome/components/font/__init__.py
@@ -17,7 +17,6 @@ from esphome.helpers import (
     cpp_string_escape,
 )
 from esphome.const import (
-    __version__,
     CONF_FAMILY,
     CONF_FILE,
     CONF_GLYPHS,
@@ -185,31 +184,6 @@ def get_font_path(value, type) -> Path:
     return None
 
 
-def download_content(url: str, path: Path) -> None:
-    if not external_files.has_remote_file_changed(url, path):
-        _LOGGER.debug("Remote file has not changed %s", url)
-        return
-
-    _LOGGER.debug(
-        "Remote file has changed, downloading from %s to %s",
-        url,
-        path,
-    )
-
-    try:
-        req = requests.get(
-            url,
-            timeout=external_files.NETWORK_TIMEOUT,
-            headers={"User-agent": f"ESPHome/{__version__} (https://esphome.io)"},
-        )
-        req.raise_for_status()
-    except requests.exceptions.RequestException as e:
-        raise cv.Invalid(f"Could not download from {url}: {e}")
-
-    path.parent.mkdir(parents=True, exist_ok=True)
-    path.write_bytes(req.content)
-
-
 def download_gfont(value):
     name = (
         f"{value[CONF_FAMILY]}:ital,wght@{int(value[CONF_ITALIC])},{value[CONF_WEIGHT]}"
@@ -236,7 +210,7 @@ def download_gfont(value):
     ttf_url = match.group(1)
     _LOGGER.debug("download_gfont: ttf_url=%s", ttf_url)
 
-    download_content(ttf_url, path)
+    external_files.download_content(ttf_url, path)
     return value
 
 
@@ -244,7 +218,7 @@ def download_web_font(value):
     url = value[CONF_URL]
     path = get_font_path(value, TYPE_WEB)
 
-    download_content(url, path)
+    external_files.download_content(url, path)
     _LOGGER.debug("download_web_font: path=%s", path)
     return value
 
diff --git a/esphome/components/gpio/one_wire/gpio_one_wire.cpp b/esphome/components/gpio/one_wire/gpio_one_wire.cpp
index f47e8d58e3..36eaf2160a 100644
--- a/esphome/components/gpio/one_wire/gpio_one_wire.cpp
+++ b/esphome/components/gpio/one_wire/gpio_one_wire.cpp
@@ -9,6 +9,10 @@ static const char *const TAG = "gpio.one_wire";
 
 void GPIOOneWireBus::setup() {
   ESP_LOGCONFIG(TAG, "Setting up 1-wire bus...");
+  this->t_pin_->setup();
+  // clear bus with 480µs high, otherwise initial reset in search might fail
+  this->t_pin_->pin_mode(gpio::FLAG_INPUT | gpio::FLAG_PULLUP);
+  delayMicroseconds(480);
   this->search();
 }
 
@@ -60,7 +64,7 @@ void HOT IRAM_ATTR GPIOOneWireBus::write_bit_(bool bit) {
   // recovery time: t_rec: min=1µs
   // ds18b20 appears to read the bus after roughly 14µs
   uint32_t delay0 = bit ? 6 : 60;
-  uint32_t delay1 = bit ? 54 : 5;
+  uint32_t delay1 = bit ? 59 : 5;
 
   // delay A/C
   delayMicroseconds(delay0);
@@ -90,13 +94,15 @@ bool HOT IRAM_ATTR GPIOOneWireBus::read_bit_() {
 
   // measure from start value directly, to get best accurate timing no matter
   // how long pin_mode/delayMicroseconds took
-  delayMicroseconds(12 - (micros() - start));
+  uint32_t now = micros();
+  if (now - start < 12)
+    delayMicroseconds(12 - (now - start));
 
   // sample bus to read bit from peer
   bool r = pin_.digital_read();
 
   // read slot is at least 60µs; get as close to 60µs to spend less time with interrupts locked
-  uint32_t now = micros();
+  now = micros();
   if (now - start < 60)
     delayMicroseconds(60 - (now - start));
 
diff --git a/esphome/components/gree/climate.py b/esphome/components/gree/climate.py
index 02ce7b12d4..c88a428391 100644
--- a/esphome/components/gree/climate.py
+++ b/esphome/components/gree/climate.py
@@ -16,6 +16,7 @@ MODELS = {
     "yan": Model.GREE_YAN,
     "yaa": Model.GREE_YAA,
     "yac": Model.GREE_YAC,
+    "yac1fb9": Model.GREE_YAC1FB9,
 }
 
 CONFIG_SCHEMA = climate_ir.CLIMATE_IR_WITH_RECEIVER_SCHEMA.extend(
diff --git a/esphome/components/gree/gree.cpp b/esphome/components/gree/gree.cpp
index 1bbb443fce..cce2a8ffee 100644
--- a/esphome/components/gree/gree.cpp
+++ b/esphome/components/gree/gree.cpp
@@ -24,7 +24,7 @@ void GreeClimate::transmit_state() {
     remote_state[4] |= (this->horizontal_swing_() << 4);
   }
 
-  if (this->model_ == GREE_YAA || this->model_ == GREE_YAC) {
+  if (this->model_ == GREE_YAA || this->model_ == GREE_YAC || this->model_ == GREE_YAC1FB9) {
     remote_state[2] = 0x20;  // bits 0..3 always 0000, bits 4..7 TURBO,LIGHT,HEALTH,X-FAN
     remote_state[3] = 0x50;  // bits 4..7 always 0101
     remote_state[6] = 0x20;  // YAA1FB, FAA1FB1, YB1F2 bits 4..7 always 0010
@@ -53,7 +53,11 @@ void GreeClimate::transmit_state() {
   data->set_carrier_frequency(GREE_IR_FREQUENCY);
 
   data->mark(GREE_HEADER_MARK);
-  data->space(GREE_HEADER_SPACE);
+  if (this->model_ == GREE_YAC1FB9) {
+    data->space(GREE_YAC1FB9_HEADER_SPACE);
+  } else {
+    data->space(GREE_HEADER_SPACE);
+  }
 
   for (int i = 0; i < 4; i++) {
     for (uint8_t mask = 1; mask > 0; mask <<= 1) {  // iterate through bit mask
@@ -71,7 +75,11 @@ void GreeClimate::transmit_state() {
   data->space(GREE_ZERO_SPACE);
 
   data->mark(GREE_BIT_MARK);
-  data->space(GREE_MESSAGE_SPACE);
+  if (this->model_ == GREE_YAC1FB9) {
+    data->space(GREE_YAC1FB9_MESSAGE_SPACE);
+  } else {
+    data->space(GREE_MESSAGE_SPACE);
+  }
 
   for (int i = 4; i < 8; i++) {
     for (uint8_t mask = 1; mask > 0; mask <<= 1) {  // iterate through bit mask
diff --git a/esphome/components/gree/gree.h b/esphome/components/gree/gree.h
index e7131a2b89..524a95aebd 100644
--- a/esphome/components/gree/gree.h
+++ b/esphome/components/gree/gree.h
@@ -41,6 +41,10 @@ const uint32_t GREE_YAC_HEADER_MARK = 6000;
 const uint32_t GREE_YAC_HEADER_SPACE = 3000;
 const uint32_t GREE_YAC_BIT_MARK = 650;
 
+// Timing specific to YAC1FB9
+const uint32_t GREE_YAC1FB9_HEADER_SPACE = 4500;
+const uint32_t GREE_YAC1FB9_MESSAGE_SPACE = 19980;
+
 // State Frame size
 const uint8_t GREE_STATE_FRAME_SIZE = 8;
 
@@ -67,7 +71,7 @@ const uint8_t GREE_HDIR_MRIGHT = 0x05;
 const uint8_t GREE_HDIR_RIGHT = 0x06;
 
 // Model codes
-enum Model { GREE_GENERIC, GREE_YAN, GREE_YAA, GREE_YAC };
+enum Model { GREE_GENERIC, GREE_YAN, GREE_YAA, GREE_YAC, GREE_YAC1FB9 };
 
 class GreeClimate : public climate_ir::ClimateIR {
  public:
diff --git a/esphome/components/haier/binary_sensor/__init__.py b/esphome/components/haier/binary_sensor/__init__.py
index 8e9d5ec578..3a4935b22d 100644
--- a/esphome/components/haier/binary_sensor/__init__.py
+++ b/esphome/components/haier/binary_sensor/__init__.py
@@ -56,7 +56,7 @@ SENSOR_TYPES = {
 
 CONFIG_SCHEMA = cv.Schema(
     {
-        cv.Required(CONF_HAIER_ID): cv.use_id(HonClimate),
+        cv.GenerateID(CONF_HAIER_ID): cv.use_id(HonClimate),
     }
 ).extend({cv.Optional(type): schema for type, schema in SENSOR_TYPES.items()})
 
@@ -64,8 +64,8 @@ CONFIG_SCHEMA = cv.Schema(
 async def to_code(config):
     paren = await cg.get_variable(config[CONF_HAIER_ID])
 
-    for type, _ in SENSOR_TYPES.items():
-        if conf := config.get(type):
+    for type_ in SENSOR_TYPES:
+        if conf := config.get(type_):
             sens = await binary_sensor.new_binary_sensor(conf)
-            binary_sensor_type = getattr(BinarySensorTypeEnum, type.upper())
+            binary_sensor_type = getattr(BinarySensorTypeEnum, type_.upper())
             cg.add(paren.set_sub_binary_sensor(binary_sensor_type, sens))
diff --git a/esphome/components/haier/button/__init__.py b/esphome/components/haier/button/__init__.py
index efe6180aaf..745ad95fb6 100644
--- a/esphome/components/haier/button/__init__.py
+++ b/esphome/components/haier/button/__init__.py
@@ -21,7 +21,7 @@ ICON_SPRAY_BOTTLE = "mdi:spray-bottle"
 
 CONFIG_SCHEMA = cv.Schema(
     {
-        cv.Required(CONF_HAIER_ID): cv.use_id(HonClimate),
+        cv.GenerateID(CONF_HAIER_ID): cv.use_id(HonClimate),
         cv.Optional(CONF_SELF_CLEANING): button.button_schema(
             SelfCleaningButton,
             icon=ICON_SPRAY_BOTTLE,
diff --git a/esphome/components/haier/climate.py b/esphome/components/haier/climate.py
index 1562708a4f..f7423a1356 100644
--- a/esphome/components/haier/climate.py
+++ b/esphome/components/haier/climate.py
@@ -38,6 +38,9 @@ PROTOCOL_MAX_TEMPERATURE = 30.0
 PROTOCOL_TARGET_TEMPERATURE_STEP = 1.0
 PROTOCOL_CURRENT_TEMPERATURE_STEP = 0.5
 PROTOCOL_CONTROL_PACKET_SIZE = 10
+PROTOCOL_MIN_SENSORS_PACKET_SIZE = 18
+PROTOCOL_DEFAULT_SENSORS_PACKET_SIZE = 22
+PROTOCOL_STATUS_MESSAGE_HEADER_SIZE = 0
 
 CODEOWNERS = ["@paveldn"]
 DEPENDENCIES = ["climate", "uart"]
@@ -48,6 +51,9 @@ CONF_CONTROL_PACKET_SIZE = "control_packet_size"
 CONF_HORIZONTAL_AIRFLOW = "horizontal_airflow"
 CONF_ON_ALARM_START = "on_alarm_start"
 CONF_ON_ALARM_END = "on_alarm_end"
+CONF_ON_STATUS_MESSAGE = "on_status_message"
+CONF_SENSORS_PACKET_SIZE = "sensors_packet_size"
+CONF_STATUS_MESSAGE_HEADER_SIZE = "status_message_header_size"
 CONF_VERTICAL_AIRFLOW = "vertical_airflow"
 CONF_WIFI_SIGNAL = "wifi_signal"
 
@@ -129,6 +135,11 @@ HaierAlarmEndTrigger = haier_ns.class_(
     automation.Trigger.template(cg.uint8, cg.const_char_ptr),
 )
 
+StatusMessageTrigger = haier_ns.class_(
+    "StatusMessageTrigger",
+    automation.Trigger.template(cg.const_char_ptr, cg.size_t),
+)
+
 
 def validate_visual(config):
     if CONF_VISUAL in config:
@@ -183,7 +194,6 @@ BASE_CONFIG_SCHEMA = (
             cv.Optional(
                 CONF_SUPPORTED_SWING_MODES,
                 default=[
-                    "OFF",
                     "VERTICAL",
                     "HORIZONTAL",
                     "BOTH",
@@ -194,6 +204,11 @@ BASE_CONFIG_SCHEMA = (
             cv.Optional(
                 CONF_ANSWER_TIMEOUT,
             ): cv.positive_time_period_milliseconds,
+            cv.Optional(CONF_ON_STATUS_MESSAGE): automation.validate_automation(
+                {
+                    cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(StatusMessageTrigger),
+                }
+            ),
         }
     )
     .extend(uart.UART_DEVICE_SCHEMA)
@@ -211,7 +226,7 @@ CONFIG_SCHEMA = cv.All(
                     ): cv.boolean,
                     cv.Optional(
                         CONF_SUPPORTED_PRESETS,
-                        default=list(["BOOST", "COMFORT"]),  # No AWAY by default
+                        default=["BOOST", "COMFORT"],  # No AWAY by default
                     ): cv.ensure_list(
                         cv.enum(SUPPORTED_CLIMATE_PRESETS_SMARTAIR2_OPTIONS, upper=True)
                     ),
@@ -229,9 +244,17 @@ CONFIG_SCHEMA = cv.All(
                     cv.Optional(
                         CONF_CONTROL_PACKET_SIZE, default=PROTOCOL_CONTROL_PACKET_SIZE
                     ): cv.int_range(min=PROTOCOL_CONTROL_PACKET_SIZE, max=50),
+                    cv.Optional(
+                        CONF_SENSORS_PACKET_SIZE,
+                        default=PROTOCOL_DEFAULT_SENSORS_PACKET_SIZE,
+                    ): cv.int_range(min=PROTOCOL_MIN_SENSORS_PACKET_SIZE, max=50),
+                    cv.Optional(
+                        CONF_STATUS_MESSAGE_HEADER_SIZE,
+                        default=PROTOCOL_STATUS_MESSAGE_HEADER_SIZE,
+                    ): cv.int_range(min=PROTOCOL_STATUS_MESSAGE_HEADER_SIZE),
                     cv.Optional(
                         CONF_SUPPORTED_PRESETS,
-                        default=list(["BOOST", "ECO", "SLEEP"]),  # No AWAY by default
+                        default=["BOOST", "ECO", "SLEEP"],  # No AWAY by default
                     ): cv.ensure_list(
                         cv.enum(SUPPORTED_CLIMATE_PRESETS_HON_OPTIONS, upper=True)
                     ),
@@ -427,11 +450,7 @@ def _final_validate(config):
             "No logger component found, logging for Haier protocol is disabled"
         )
         cg.add_build_flag("-DHAIER_LOG_LEVEL=0")
-    if (
-        (CONF_WIFI_SIGNAL in config)
-        and (config[CONF_WIFI_SIGNAL])
-        and CONF_WIFI not in full_config
-    ):
+    if config.get(CONF_WIFI_SIGNAL) and CONF_WIFI not in full_config:
         raise cv.Invalid(
             f"No WiFi configured, if you want to use haier climate without WiFi add {CONF_WIFI_SIGNAL}: false to climate configuration"
         )
@@ -473,6 +492,16 @@ async def to_code(config):
                 config[CONF_CONTROL_PACKET_SIZE] - PROTOCOL_CONTROL_PACKET_SIZE
             )
         )
+    if CONF_SENSORS_PACKET_SIZE in config:
+        cg.add(
+            var.set_extra_sensors_packet_bytes_size(
+                config[CONF_SENSORS_PACKET_SIZE] - PROTOCOL_MIN_SENSORS_PACKET_SIZE
+            )
+        )
+    if CONF_STATUS_MESSAGE_HEADER_SIZE in config:
+        cg.add(
+            var.set_status_message_header_size(config[CONF_STATUS_MESSAGE_HEADER_SIZE])
+        )
     for conf in config.get(CONF_ON_ALARM_START, []):
         trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
         await automation.build_automation(
@@ -483,5 +512,10 @@ async def to_code(config):
         await automation.build_automation(
             trigger, [(cg.uint8, "code"), (cg.const_char_ptr, "message")], conf
         )
+    for conf in config.get(CONF_ON_STATUS_MESSAGE, []):
+        trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
+        await automation.build_automation(
+            trigger, [(cg.const_char_ptr, "data"), (cg.size_t, "data_size")], conf
+        )
     # https://github.com/paveldn/HaierProtocol
-    cg.add_library("pavlodn/HaierProtocol", "0.9.28")
+    cg.add_library("pavlodn/HaierProtocol", "0.9.31")
diff --git a/esphome/components/haier/haier_base.cpp b/esphome/components/haier/haier_base.cpp
index 1fca3dfb85..0bd3863160 100644
--- a/esphome/components/haier/haier_base.cpp
+++ b/esphome/components/haier/haier_base.cpp
@@ -186,6 +186,10 @@ void HaierClimateBase::send_custom_command(const haier_protocol::HaierMessage &m
   this->action_request_ = PendingAction({ActionRequest::SEND_CUSTOM_COMMAND, message});
 }
 
+void HaierClimateBase::add_status_message_callback(std::function<void(const char *, size_t)> &&callback) {
+  this->status_message_callback_.add(std::move(callback));
+}
+
 haier_protocol::HandlerError HaierClimateBase::answer_preprocess_(
     haier_protocol::FrameType request_message_type, haier_protocol::FrameType expected_request_message_type,
     haier_protocol::FrameType answer_message_type, haier_protocol::FrameType expected_answer_message_type,
diff --git a/esphome/components/haier/haier_base.h b/esphome/components/haier/haier_base.h
index f261a106a2..c0bf878519 100644
--- a/esphome/components/haier/haier_base.h
+++ b/esphome/components/haier/haier_base.h
@@ -4,6 +4,7 @@
 #include <set>
 #include "esphome/components/climate/climate.h"
 #include "esphome/components/uart/uart.h"
+#include "esphome/core/automation.h"
 // HaierProtocol
 #include <protocol/haier_protocol.h>
 
@@ -56,6 +57,7 @@ class HaierClimateBase : public esphome::Component,
   void set_answer_timeout(uint32_t timeout);
   void set_send_wifi(bool send_wifi);
   void send_custom_command(const haier_protocol::HaierMessage &message);
+  void add_status_message_callback(std::function<void(const char *, size_t)> &&callback);
 
  protected:
   enum class ProtocolPhases {
@@ -140,11 +142,19 @@ class HaierClimateBase : public esphome::Component,
   esphome::climate::ClimateTraits traits_;
   HvacSettings current_hvac_settings_;
   HvacSettings next_hvac_settings_;
-  std::unique_ptr<uint8_t[]> last_status_message_;
+  std::unique_ptr<uint8_t[]> last_status_message_{nullptr};
   std::chrono::steady_clock::time_point last_request_timestamp_;       // For interval between messages
   std::chrono::steady_clock::time_point last_valid_status_timestamp_;  // For protocol timeout
   std::chrono::steady_clock::time_point last_status_request_;          // To request AC status
   std::chrono::steady_clock::time_point last_signal_request_;          // To send WiFI signal level
+  CallbackManager<void(const char *, size_t)> status_message_callback_{};
+};
+
+class StatusMessageTrigger : public Trigger<const char *, size_t> {
+ public:
+  explicit StatusMessageTrigger(HaierClimateBase *parent) {
+    parent->add_status_message_callback([this](const char *data, size_t data_size) { this->trigger(data, data_size); });
+  }
 };
 
 }  // namespace haier
diff --git a/esphome/components/haier/hon_climate.cpp b/esphome/components/haier/hon_climate.cpp
index 903f7964da..a1c5098cec 100644
--- a/esphome/components/haier/hon_climate.cpp
+++ b/esphome/components/haier/hon_climate.cpp
@@ -18,12 +18,13 @@ constexpr int PROTOCOL_OUTDOOR_TEMPERATURE_OFFSET = -64;
 constexpr uint8_t CONTROL_MESSAGE_RETRIES = 5;
 constexpr std::chrono::milliseconds CONTROL_MESSAGE_RETRIES_INTERVAL = std::chrono::milliseconds(500);
 constexpr size_t ALARM_STATUS_REQUEST_INTERVAL_MS = 600000;
+const uint8_t ONE_BUF[] = {0x00, 0x01};
+const uint8_t ZERO_BUF[] = {0x00, 0x00};
 
 HonClimate::HonClimate()
     : cleaning_status_(CleaningState::NO_CLEANING), got_valid_outdoor_temp_(false), active_alarms_{0x00, 0x00, 0x00,
                                                                                                    0x00, 0x00, 0x00,
                                                                                                    0x00, 0x00} {
-  last_status_message_ = std::unique_ptr<uint8_t[]>(new uint8_t[sizeof(hon_protocol::HaierPacketControl)]);
   this->fan_mode_speed_ = (uint8_t) hon_protocol::FanMode::FAN_MID;
   this->other_modes_fan_speed_ = (uint8_t) hon_protocol::FanMode::FAN_AUTO;
 }
@@ -169,11 +170,18 @@ haier_protocol::HandlerError HonClimate::status_handler_(haier_protocol::FrameTy
       this->action_request_.reset();
       this->force_send_control_ = false;
     } else {
-      if (data_size >= sizeof(hon_protocol::HaierPacketControl) + 2) {
-        memcpy(this->last_status_message_.get(), data + 2, sizeof(hon_protocol::HaierPacketControl));
+      if (!this->last_status_message_) {
+        this->real_control_packet_size_ = sizeof(hon_protocol::HaierPacketControl) + this->extra_control_packet_bytes_;
+        this->real_sensors_packet_size_ = sizeof(hon_protocol::HaierPacketSensors) + this->extra_sensors_packet_bytes_;
+        this->last_status_message_.reset();
+        this->last_status_message_ = std::unique_ptr<uint8_t[]>(new uint8_t[this->real_control_packet_size_]);
+      };
+      if (data_size >= this->real_control_packet_size_ + 2) {
+        memcpy(this->last_status_message_.get(), data + 2 + this->status_message_header_size_,
+               this->real_control_packet_size_);
+        this->status_message_callback_.call((const char *) data, data_size);
       } else {
-        ESP_LOGW(TAG, "Status packet too small: %d (should be >= %d)", data_size,
-                 sizeof(hon_protocol::HaierPacketControl));
+        ESP_LOGW(TAG, "Status packet too small: %d (should be >= %d)", data_size, this->real_control_packet_size_);
       }
       switch (this->protocol_phase_) {
         case ProtocolPhases::SENDING_FIRST_STATUS_REQUEST:
@@ -479,8 +487,8 @@ void HonClimate::initialization() {
 }
 
 haier_protocol::HaierMessage HonClimate::get_control_message() {
-  uint8_t control_out_buffer[sizeof(hon_protocol::HaierPacketControl)];
-  memcpy(control_out_buffer, this->last_status_message_.get(), sizeof(hon_protocol::HaierPacketControl));
+  uint8_t control_out_buffer[haier_protocol::MAX_FRAME_SIZE];
+  memcpy(control_out_buffer, this->last_status_message_.get(), this->real_control_packet_size_);
   hon_protocol::HaierPacketControl *out_data = (hon_protocol::HaierPacketControl *) control_out_buffer;
   control_out_buffer[4] = 0;  // This byte should be cleared before setting values
   bool has_hvac_settings = false;
@@ -636,7 +644,7 @@ haier_protocol::HaierMessage HonClimate::get_control_message() {
   out_data->health_mode = this->health_mode_ ? 1 : 0;
   return haier_protocol::HaierMessage(haier_protocol::FrameType::CONTROL,
                                       (uint16_t) hon_protocol::SubcommandsControl::SET_GROUP_PARAMETERS,
-                                      control_out_buffer, sizeof(hon_protocol::HaierPacketControl));
+                                      control_out_buffer, this->real_control_packet_size_);
 }
 
 void HonClimate::process_alarm_message_(const uint8_t *packet, uint8_t size, bool check_new) {
@@ -758,15 +766,17 @@ void HonClimate::update_sub_text_sensor_(SubTextSensorType type, const std::stri
 #endif  // USE_TEXT_SENSOR
 
 haier_protocol::HandlerError HonClimate::process_status_message_(const uint8_t *packet_buffer, uint8_t size) {
-  size_t expected_size = 2 + sizeof(hon_protocol::HaierPacketControl) + sizeof(hon_protocol::HaierPacketSensors) +
-                         this->extra_control_packet_bytes_;
-  if (size < expected_size)
+  size_t expected_size =
+      2 + this->status_message_header_size_ + this->real_control_packet_size_ + this->real_sensors_packet_size_;
+  if (size < expected_size) {
+    ESP_LOGW(TAG, "Unexpected message size %d (expexted >= %d)", size, expected_size);
     return haier_protocol::HandlerError::WRONG_MESSAGE_STRUCTURE;
+  }
   uint16_t subtype = (((uint16_t) packet_buffer[0]) << 8) + packet_buffer[1];
-  if ((subtype == 0x7D01) && (size >= expected_size + 4 + sizeof(hon_protocol::HaierPacketBigData))) {
+  if ((subtype == 0x7D01) && (size >= expected_size + sizeof(hon_protocol::HaierPacketBigData))) {
     // Got BigData packet
     const hon_protocol::HaierPacketBigData *bd_packet =
-        (const hon_protocol::HaierPacketBigData *) (&packet_buffer[expected_size + 4]);
+        (const hon_protocol::HaierPacketBigData *) (&packet_buffer[expected_size]);
 #ifdef USE_SENSOR
     this->update_sub_sensor_(SubSensorType::INDOOR_COIL_TEMPERATURE, bd_packet->indoor_coil_temperature / 2.0 - 20);
     this->update_sub_sensor_(SubSensorType::OUTDOOR_COIL_TEMPERATURE, bd_packet->outdoor_coil_temperature - 64);
@@ -795,9 +805,9 @@ haier_protocol::HandlerError HonClimate::process_status_message_(const uint8_t *
     hon_protocol::HaierPacketControl control;
     hon_protocol::HaierPacketSensors sensors;
   } packet;
-  memcpy(&packet.control, packet_buffer + 2, sizeof(hon_protocol::HaierPacketControl));
-  memcpy(&packet.sensors,
-         packet_buffer + 2 + sizeof(hon_protocol::HaierPacketControl) + this->extra_control_packet_bytes_,
+  memcpy(&packet.control, packet_buffer + 2 + this->status_message_header_size_,
+         sizeof(hon_protocol::HaierPacketControl));
+  memcpy(&packet.sensors, packet_buffer + 2 + this->status_message_header_size_ + this->real_control_packet_size_,
          sizeof(hon_protocol::HaierPacketSensors));
   if (packet.sensors.error_status != 0) {
     ESP_LOGW(TAG, "HVAC error, code=0x%02X", packet.sensors.error_status);
@@ -996,8 +1006,6 @@ haier_protocol::HandlerError HonClimate::process_status_message_(const uint8_t *
 }
 
 void HonClimate::fill_control_messages_queue_() {
-  static uint8_t one_buf[] = {0x00, 0x01};
-  static uint8_t zero_buf[] = {0x00, 0x00};
   if (!this->current_hvac_settings_.valid && !this->force_send_control_)
     return;
   this->clear_control_messages_queue_();
@@ -1009,7 +1017,7 @@ void HonClimate::fill_control_messages_queue_() {
         haier_protocol::HaierMessage(haier_protocol::FrameType::CONTROL,
                                      (uint16_t) hon_protocol::SubcommandsControl::SET_SINGLE_PARAMETER +
                                          (uint8_t) hon_protocol::DataParameters::BEEPER_STATUS,
-                                     this->beeper_status_ ? zero_buf : one_buf, 2));
+                                     this->beeper_status_ ? ZERO_BUF : ONE_BUF, 2));
   }
   // Health mode
   {
@@ -1017,7 +1025,7 @@ void HonClimate::fill_control_messages_queue_() {
         haier_protocol::HaierMessage(haier_protocol::FrameType::CONTROL,
                                      (uint16_t) hon_protocol::SubcommandsControl::SET_SINGLE_PARAMETER +
                                          (uint8_t) hon_protocol::DataParameters::HEALTH_MODE,
-                                     this->health_mode_ ? one_buf : zero_buf, 2));
+                                     this->health_mode_ ? ONE_BUF : ZERO_BUF, 2));
   }
   // Climate mode
   bool new_power = this->mode != CLIMATE_MODE_OFF;
@@ -1092,7 +1100,7 @@ void HonClimate::fill_control_messages_queue_() {
         haier_protocol::HaierMessage(haier_protocol::FrameType::CONTROL,
                                      (uint16_t) hon_protocol::SubcommandsControl::SET_SINGLE_PARAMETER +
                                          (uint8_t) hon_protocol::DataParameters::AC_POWER,
-                                     new_power ? one_buf : zero_buf, 2));
+                                     new_power ? ONE_BUF : ZERO_BUF, 2));
   }
   // CLimate preset
   {
@@ -1165,6 +1173,35 @@ void HonClimate::fill_control_messages_queue_() {
                                          (uint8_t) hon_protocol::DataParameters::SET_POINT,
                                      buffer, 2));
   }
+  // Vertical swing mode
+  if (climate_control.swing_mode.has_value()) {
+    uint8_t vertical_swing_buf[] = {0x00, (uint8_t) hon_protocol::VerticalSwingMode::AUTO};
+    uint8_t horizontal_swing_buf[] = {0x00, (uint8_t) hon_protocol::HorizontalSwingMode::AUTO};
+    switch (climate_control.swing_mode.value()) {
+      case CLIMATE_SWING_OFF:
+        horizontal_swing_buf[1] = (uint8_t) this->settings_.last_horizontal_swing;
+        vertical_swing_buf[1] = (uint8_t) this->settings_.last_vertiacal_swing;
+        break;
+      case CLIMATE_SWING_VERTICAL:
+        horizontal_swing_buf[1] = (uint8_t) this->settings_.last_horizontal_swing;
+        break;
+      case CLIMATE_SWING_HORIZONTAL:
+        vertical_swing_buf[1] = (uint8_t) this->settings_.last_vertiacal_swing;
+        break;
+      case CLIMATE_SWING_BOTH:
+        break;
+    }
+    this->control_messages_queue_.push(
+        haier_protocol::HaierMessage(haier_protocol::FrameType::CONTROL,
+                                     (uint16_t) hon_protocol::SubcommandsControl::SET_SINGLE_PARAMETER +
+                                         (uint8_t) hon_protocol::DataParameters::HORIZONTAL_SWING_MODE,
+                                     horizontal_swing_buf, 2));
+    this->control_messages_queue_.push(
+        haier_protocol::HaierMessage(haier_protocol::FrameType::CONTROL,
+                                     (uint16_t) hon_protocol::SubcommandsControl::SET_SINGLE_PARAMETER +
+                                         (uint8_t) hon_protocol::DataParameters::VERTICAL_SWING_MODE,
+                                     vertical_swing_buf, 2));
+  }
   // Fan mode
   if (climate_control.fan_mode.has_value()) {
     switch (climate_control.fan_mode.value()) {
@@ -1202,40 +1239,56 @@ void HonClimate::clear_control_messages_queue_() {
 
 bool HonClimate::prepare_pending_action() {
   switch (this->action_request_.value().action) {
-    case ActionRequest::START_SELF_CLEAN: {
-      uint8_t control_out_buffer[sizeof(hon_protocol::HaierPacketControl)];
-      memcpy(control_out_buffer, this->last_status_message_.get(), sizeof(hon_protocol::HaierPacketControl));
-      hon_protocol::HaierPacketControl *out_data = (hon_protocol::HaierPacketControl *) control_out_buffer;
-      out_data->self_cleaning_status = 1;
-      out_data->steri_clean = 0;
-      out_data->set_point = 0x06;
-      out_data->vertical_swing_mode = (uint8_t) hon_protocol::VerticalSwingMode::CENTER;
-      out_data->horizontal_swing_mode = (uint8_t) hon_protocol::HorizontalSwingMode::CENTER;
-      out_data->ac_power = 1;
-      out_data->ac_mode = (uint8_t) hon_protocol::ConditioningMode::DRY;
-      out_data->light_status = 0;
-      this->action_request_.value().message = haier_protocol::HaierMessage(
-          haier_protocol::FrameType::CONTROL, (uint16_t) hon_protocol::SubcommandsControl::SET_GROUP_PARAMETERS,
-          control_out_buffer, sizeof(hon_protocol::HaierPacketControl));
-    }
-      return true;
-    case ActionRequest::START_STERI_CLEAN: {
-      uint8_t control_out_buffer[sizeof(hon_protocol::HaierPacketControl)];
-      memcpy(control_out_buffer, this->last_status_message_.get(), sizeof(hon_protocol::HaierPacketControl));
-      hon_protocol::HaierPacketControl *out_data = (hon_protocol::HaierPacketControl *) control_out_buffer;
-      out_data->self_cleaning_status = 0;
-      out_data->steri_clean = 1;
-      out_data->set_point = 0x06;
-      out_data->vertical_swing_mode = (uint8_t) hon_protocol::VerticalSwingMode::CENTER;
-      out_data->horizontal_swing_mode = (uint8_t) hon_protocol::HorizontalSwingMode::CENTER;
-      out_data->ac_power = 1;
-      out_data->ac_mode = (uint8_t) hon_protocol::ConditioningMode::DRY;
-      out_data->light_status = 0;
-      this->action_request_.value().message = haier_protocol::HaierMessage(
-          haier_protocol::FrameType::CONTROL, (uint16_t) hon_protocol::SubcommandsControl::SET_GROUP_PARAMETERS,
-          control_out_buffer, sizeof(hon_protocol::HaierPacketControl));
-    }
-      return true;
+    case ActionRequest::START_SELF_CLEAN:
+      if (this->control_method_ == HonControlMethod::SET_GROUP_PARAMETERS) {
+        uint8_t control_out_buffer[haier_protocol::MAX_FRAME_SIZE];
+        memcpy(control_out_buffer, this->last_status_message_.get(), this->real_control_packet_size_);
+        hon_protocol::HaierPacketControl *out_data = (hon_protocol::HaierPacketControl *) control_out_buffer;
+        out_data->self_cleaning_status = 1;
+        out_data->steri_clean = 0;
+        out_data->set_point = 0x06;
+        out_data->vertical_swing_mode = (uint8_t) hon_protocol::VerticalSwingMode::CENTER;
+        out_data->horizontal_swing_mode = (uint8_t) hon_protocol::HorizontalSwingMode::CENTER;
+        out_data->ac_power = 1;
+        out_data->ac_mode = (uint8_t) hon_protocol::ConditioningMode::DRY;
+        out_data->light_status = 0;
+        this->action_request_.value().message = haier_protocol::HaierMessage(
+            haier_protocol::FrameType::CONTROL, (uint16_t) hon_protocol::SubcommandsControl::SET_GROUP_PARAMETERS,
+            control_out_buffer, this->real_control_packet_size_);
+        return true;
+      } else if (this->control_method_ == HonControlMethod::SET_SINGLE_PARAMETER) {
+        this->action_request_.value().message =
+            haier_protocol::HaierMessage(haier_protocol::FrameType::CONTROL,
+                                         (uint16_t) hon_protocol::SubcommandsControl::SET_SINGLE_PARAMETER +
+                                             (uint8_t) hon_protocol::DataParameters::SELF_CLEANING,
+                                         ONE_BUF, 2);
+        return true;
+      } else {
+        this->action_request_.reset();
+        return false;
+      }
+    case ActionRequest::START_STERI_CLEAN:
+      if (this->control_method_ == HonControlMethod::SET_GROUP_PARAMETERS) {
+        uint8_t control_out_buffer[haier_protocol::MAX_FRAME_SIZE];
+        memcpy(control_out_buffer, this->last_status_message_.get(), this->real_control_packet_size_);
+        hon_protocol::HaierPacketControl *out_data = (hon_protocol::HaierPacketControl *) control_out_buffer;
+        out_data->self_cleaning_status = 0;
+        out_data->steri_clean = 1;
+        out_data->set_point = 0x06;
+        out_data->vertical_swing_mode = (uint8_t) hon_protocol::VerticalSwingMode::CENTER;
+        out_data->horizontal_swing_mode = (uint8_t) hon_protocol::HorizontalSwingMode::CENTER;
+        out_data->ac_power = 1;
+        out_data->ac_mode = (uint8_t) hon_protocol::ConditioningMode::DRY;
+        out_data->light_status = 0;
+        this->action_request_.value().message = haier_protocol::HaierMessage(
+            haier_protocol::FrameType::CONTROL, (uint16_t) hon_protocol::SubcommandsControl::SET_GROUP_PARAMETERS,
+            control_out_buffer, this->real_control_packet_size_);
+        return true;
+      } else {
+        // No Steri clean support (yet?) in SET_SINGLE_PARAMETER
+        this->action_request_.reset();
+        return false;
+      }
     default:
       return HaierClimateBase::prepare_pending_action();
   }
@@ -1251,6 +1304,7 @@ void HonClimate::process_protocol_reset() {
 #endif  // USE_SENSOR
   this->got_valid_outdoor_temp_ = false;
   this->hvac_hardware_info_.reset();
+  this->last_status_message_.reset(nullptr);
 }
 
 bool HonClimate::should_get_big_data_() {
diff --git a/esphome/components/haier/hon_climate.h b/esphome/components/haier/hon_climate.h
index 7b4fcee6b9..64c54186ed 100644
--- a/esphome/components/haier/hon_climate.h
+++ b/esphome/components/haier/hon_climate.h
@@ -104,6 +104,8 @@ class HonClimate : public HaierClimateBase {
   void start_self_cleaning();
   void start_steri_cleaning();
   void set_extra_control_packet_bytes_size(size_t size) { this->extra_control_packet_bytes_ = size; };
+  void set_extra_sensors_packet_bytes_size(size_t size) { this->extra_sensors_packet_bytes_ = size; };
+  void set_status_message_header_size(size_t size) { this->status_message_header_size_ = size; };
   void set_control_method(HonControlMethod method) { this->control_method_ = method; };
   void add_alarm_start_callback(std::function<void(uint8_t, const char *)> &&callback);
   void add_alarm_end_callback(std::function<void(uint8_t, const char *)> &&callback);
@@ -158,7 +160,11 @@ class HonClimate : public HaierClimateBase {
   esphome::optional<hon_protocol::HorizontalSwingMode> pending_horizontal_direction_{};
   esphome::optional<HardwareInfo> hvac_hardware_info_{};
   uint8_t active_alarms_[8];
-  int extra_control_packet_bytes_;
+  int extra_control_packet_bytes_{0};
+  int extra_sensors_packet_bytes_{4};
+  int status_message_header_size_{0};
+  int real_control_packet_size_{sizeof(hon_protocol::HaierPacketControl)};
+  int real_sensors_packet_size_{sizeof(hon_protocol::HaierPacketSensors) + 4};
   HonControlMethod control_method_;
   std::queue<haier_protocol::HaierMessage> control_messages_queue_;
   CallbackManager<void(uint8_t, const char *)> alarm_start_callback_{};
diff --git a/esphome/components/haier/hon_packet.h b/esphome/components/haier/hon_packet.h
index a03ac2831f..615f93528e 100644
--- a/esphome/components/haier/hon_packet.h
+++ b/esphome/components/haier/hon_packet.h
@@ -41,15 +41,20 @@ enum class ConditioningMode : uint8_t {
 enum class DataParameters : uint8_t {
   AC_POWER = 0x01,
   SET_POINT = 0x02,
+  VERTICAL_SWING_MODE = 0x03,
   AC_MODE = 0x04,
   FAN_MODE = 0x05,
   USE_FAHRENHEIT = 0x07,
+  DISPLAY_STATUS = 0x09,
   TEN_DEGREE = 0x0A,
   HEALTH_MODE = 0x0B,
+  HORIZONTAL_SWING_MODE = 0x0C,
+  SELF_CLEANING = 0x0D,
   BEEPER_STATUS = 0x16,
   LOCK_REMOTE = 0x17,
   QUIET_MODE = 0x19,
   FAST_MODE = 0x1A,
+  SLEEP_MODE = 0x1B,
 };
 
 enum class SpecialMode : uint8_t { NONE = 0x00, ELDERLY = 0x01, CHILDREN = 0x02, PREGNANT = 0x03 };
diff --git a/esphome/components/haier/sensor/__init__.py b/esphome/components/haier/sensor/__init__.py
index b2717631e0..23c1d6f008 100644
--- a/esphome/components/haier/sensor/__init__.py
+++ b/esphome/components/haier/sensor/__init__.py
@@ -137,16 +137,16 @@ SENSOR_TYPES = {
 
 CONFIG_SCHEMA = cv.Schema(
     {
-        cv.Required(CONF_HAIER_ID): cv.use_id(HonClimate),
+        cv.GenerateID(CONF_HAIER_ID): cv.use_id(HonClimate),
     }
-).extend({cv.Optional(type): schema for type, schema in SENSOR_TYPES.items()})
+).extend({cv.Optional(type_): schema for type_, schema in SENSOR_TYPES.items()})
 
 
 async def to_code(config):
     paren = await cg.get_variable(config[CONF_HAIER_ID])
 
-    for type, _ in SENSOR_TYPES.items():
-        if conf := config.get(type):
+    for type_ in SENSOR_TYPES:
+        if conf := config.get(type_):
             sens = await sensor.new_sensor(conf)
-            sensor_type = getattr(SensorTypeEnum, type.upper())
+            sensor_type = getattr(SensorTypeEnum, type_.upper())
             cg.add(paren.set_sub_sensor(sensor_type, sens))
diff --git a/esphome/components/haier/smartair2_climate.cpp b/esphome/components/haier/smartair2_climate.cpp
index 00590694d5..028e8a4087 100644
--- a/esphome/components/haier/smartair2_climate.cpp
+++ b/esphome/components/haier/smartair2_climate.cpp
@@ -37,6 +37,7 @@ haier_protocol::HandlerError Smartair2Climate::status_handler_(haier_protocol::F
     } else {
       if (data_size >= sizeof(smartair2_protocol::HaierPacketControl) + 2) {
         memcpy(this->last_status_message_.get(), data + 2, sizeof(smartair2_protocol::HaierPacketControl));
+        this->status_message_callback_.call((const char *) data, data_size);
       } else {
         ESP_LOGW(TAG, "Status packet too small: %d (should be >= %d)", data_size,
                  sizeof(smartair2_protocol::HaierPacketControl));
diff --git a/esphome/components/haier/text_sensor/__init__.py b/esphome/components/haier/text_sensor/__init__.py
index 528b70d83e..d28c5a8c0e 100644
--- a/esphome/components/haier/text_sensor/__init__.py
+++ b/esphome/components/haier/text_sensor/__init__.py
@@ -39,7 +39,7 @@ TEXT_SENSOR_TYPES = {
 
 CONFIG_SCHEMA = cv.Schema(
     {
-        cv.Required(CONF_HAIER_ID): cv.use_id(HonClimate),
+        cv.GenerateID(CONF_HAIER_ID): cv.use_id(HonClimate),
     }
 ).extend({cv.Optional(type): schema for type, schema in TEXT_SENSOR_TYPES.items()})
 
@@ -47,8 +47,8 @@ CONFIG_SCHEMA = cv.Schema(
 async def to_code(config):
     paren = await cg.get_variable(config[CONF_HAIER_ID])
 
-    for type, _ in TEXT_SENSOR_TYPES.items():
-        if conf := config.get(type):
+    for type_ in TEXT_SENSOR_TYPES:
+        if conf := config.get(type_):
             sens = await text_sensor.new_text_sensor(conf)
-            text_sensor_type = getattr(TextSensorTypeEnum, type.upper())
+            text_sensor_type = getattr(TextSensorTypeEnum, type_.upper())
             cg.add(paren.set_sub_text_sensor(text_sensor_type, sens))
diff --git a/esphome/components/heatpumpir/climate.py b/esphome/components/heatpumpir/climate.py
index 8af4ca590f..80900d7db9 100644
--- a/esphome/components/heatpumpir/climate.py
+++ b/esphome/components/heatpumpir/climate.py
@@ -8,7 +8,6 @@ from esphome.const import (
     CONF_PROTOCOL,
     CONF_VISUAL,
 )
-from esphome.core import CORE
 
 CODEOWNERS = ["@rob-deutsch"]
 
@@ -34,6 +33,7 @@ PROTOCOLS = {
     "greeyan": Protocol.PROTOCOL_GREEYAN,
     "greeyac": Protocol.PROTOCOL_GREEYAC,
     "greeyt": Protocol.PROTOCOL_GREEYT,
+    "greeyap": Protocol.PROTOCOL_GREEYAP,
     "hisense_aud": Protocol.PROTOCOL_HISENSE_AUD,
     "hitachi": Protocol.PROTOCOL_HITACHI,
     "hyundai": Protocol.PROTOCOL_HYUNDAI,
@@ -61,6 +61,16 @@ PROTOCOLS = {
     "toshiba_daiseikai": Protocol.PROTOCOL_TOSHIBA_DAISEIKAI,
     "toshiba": Protocol.PROTOCOL_TOSHIBA,
     "zhlt01": Protocol.PROTOCOL_ZHLT01,
+    "nibe": Protocol.PROTOCOL_NIBE,
+    "carrier_qlima_1": Protocol.PROTOCOL_QLIMA_1,
+    "carrier_qlima_2": Protocol.PROTOCOL_QLIMA_2,
+    "samsung_aqv12msan": Protocol.PROTOCOL_SAMSUNG_AQV12MSAN,
+    "zhjg01": Protocol.PROTOCOL_ZHJG01,
+    "airway": Protocol.PROTOCOL_AIRWAY,
+    "bgh_aud": Protocol.PROTOCOL_BGH_AUD,
+    "panasonic_altdke": Protocol.PROTOCOL_PANASONIC_ALTDKE,
+    "vaillantvai8": Protocol.PROTOCOL_VAILLANTVAI8,
+    "r51m": Protocol.PROTOCOL_R51M,
 }
 
 CONF_HORIZONTAL_DEFAULT = "horizontal_default"
@@ -116,7 +126,4 @@ def to_code(config):
     cg.add(var.set_max_temperature(config[CONF_MAX_TEMPERATURE]))
     cg.add(var.set_min_temperature(config[CONF_MIN_TEMPERATURE]))
 
-    cg.add_library("tonia/HeatpumpIR", "1.0.23")
-
-    if CORE.is_esp8266 or CORE.is_esp32:
-        cg.add_library("crankyoldgit/IRremoteESP8266", "2.8.4")
+    cg.add_library("tonia/HeatpumpIR", "1.0.27")
diff --git a/esphome/components/heatpumpir/heatpumpir.cpp b/esphome/components/heatpumpir/heatpumpir.cpp
index 5e7237b63c..144dcc9bfa 100644
--- a/esphome/components/heatpumpir/heatpumpir.cpp
+++ b/esphome/components/heatpumpir/heatpumpir.cpp
@@ -28,6 +28,7 @@ const std::map<Protocol, std::function<HeatpumpIR *()>> PROTOCOL_CONSTRUCTOR_MAP
     {PROTOCOL_GREEYAN, []() { return new GreeYANHeatpumpIR(); }},                            // NOLINT
     {PROTOCOL_GREEYAC, []() { return new GreeYACHeatpumpIR(); }},                            // NOLINT
     {PROTOCOL_GREEYT, []() { return new GreeYTHeatpumpIR(); }},                              // NOLINT
+    {PROTOCOL_GREEYAP, []() { return new GreeYAPHeatpumpIR(); }},                            // NOLINT
     {PROTOCOL_HISENSE_AUD, []() { return new HisenseHeatpumpIR(); }},                        // NOLINT
     {PROTOCOL_HITACHI, []() { return new HitachiHeatpumpIR(); }},                            // NOLINT
     {PROTOCOL_HYUNDAI, []() { return new HyundaiHeatpumpIR(); }},                            // NOLINT
@@ -55,6 +56,16 @@ const std::map<Protocol, std::function<HeatpumpIR *()>> PROTOCOL_CONSTRUCTOR_MAP
     {PROTOCOL_TOSHIBA_DAISEIKAI, []() { return new ToshibaDaiseikaiHeatpumpIR(); }},         // NOLINT
     {PROTOCOL_TOSHIBA, []() { return new ToshibaHeatpumpIR(); }},                            // NOLINT
     {PROTOCOL_ZHLT01, []() { return new ZHLT01HeatpumpIR(); }},                              // NOLINT
+    {PROTOCOL_NIBE, []() { return new NibeHeatpumpIR(); }},                                  // NOLINT
+    {PROTOCOL_QLIMA_1, []() { return new Qlima1HeatpumpIR(); }},                             // NOLINT
+    {PROTOCOL_QLIMA_2, []() { return new Qlima2HeatpumpIR(); }},                             // NOLINT
+    {PROTOCOL_SAMSUNG_AQV12MSAN, []() { return new SamsungAQV12MSANHeatpumpIR(); }},         // NOLINT
+    {PROTOCOL_ZHJG01, []() { return new ZHJG01HeatpumpIR(); }},                              // NOLINT
+    {PROTOCOL_AIRWAY, []() { return new AIRWAYHeatpumpIR(); }},                              // NOLINT
+    {PROTOCOL_BGH_AUD, []() { return new BGHHeatpumpIR(); }},                                // NOLINT
+    {PROTOCOL_PANASONIC_ALTDKE, []() { return new PanasonicAltDKEHeatpumpIR(); }},           // NOLINT
+    {PROTOCOL_VAILLANTVAI8, []() { return new VaillantHeatpumpIR(); }},                      // NOLINT
+    {PROTOCOL_R51M, []() { return new R51MHeatpumpIR(); }},                                  // NOLINT
 };
 
 void HeatpumpIRClimate::setup() {
diff --git a/esphome/components/heatpumpir/heatpumpir.h b/esphome/components/heatpumpir/heatpumpir.h
index e8b03b4c26..f6e7ff3cd6 100644
--- a/esphome/components/heatpumpir/heatpumpir.h
+++ b/esphome/components/heatpumpir/heatpumpir.h
@@ -28,6 +28,7 @@ enum Protocol {
   PROTOCOL_GREEYAN,
   PROTOCOL_GREEYAC,
   PROTOCOL_GREEYT,
+  PROTOCOL_GREEYAP,
   PROTOCOL_HISENSE_AUD,
   PROTOCOL_HITACHI,
   PROTOCOL_HYUNDAI,
@@ -55,6 +56,16 @@ enum Protocol {
   PROTOCOL_TOSHIBA_DAISEIKAI,
   PROTOCOL_TOSHIBA,
   PROTOCOL_ZHLT01,
+  PROTOCOL_NIBE,
+  PROTOCOL_QLIMA_1,
+  PROTOCOL_QLIMA_2,
+  PROTOCOL_SAMSUNG_AQV12MSAN,
+  PROTOCOL_ZHJG01,
+  PROTOCOL_AIRWAY,
+  PROTOCOL_BGH_AUD,
+  PROTOCOL_PANASONIC_ALTDKE,
+  PROTOCOL_VAILLANTVAI8,
+  PROTOCOL_R51M,
 };
 
 // Simple enum to represent horizontal directios
diff --git a/esphome/components/http_request/__init__.py b/esphome/components/http_request/__init__.py
index 37487ec9a7..ade7024bed 100644
--- a/esphome/components/http_request/__init__.py
+++ b/esphome/components/http_request/__init__.py
@@ -257,7 +257,7 @@ async def http_request_action_to_code(config, action_id, template_arg, args):
             trigger,
             [
                 (cg.std_shared_ptr.template(HttpContainer), "response"),
-                (cg.std_string, "body"),
+                (cg.std_string_ref, "body"),
             ],
             conf,
         )
diff --git a/esphome/components/http_request/http_request.h b/esphome/components/http_request/http_request.h
index df6bc7dea7..82b7392648 100644
--- a/esphome/components/http_request/http_request.h
+++ b/esphome/components/http_request/http_request.h
@@ -43,10 +43,10 @@ class HttpContainer : public Parented<HttpRequestComponent> {
   bool secure_{false};
 };
 
-class HttpRequestResponseTrigger : public Trigger<std::shared_ptr<HttpContainer>, std::string> {
+class HttpRequestResponseTrigger : public Trigger<std::shared_ptr<HttpContainer>, std::string &> {
  public:
-  void process(std::shared_ptr<HttpContainer> container, std::string response_body) {
-    this->trigger(std::move(container), std::move(response_body));
+  void process(std::shared_ptr<HttpContainer> container, std::string &response_body) {
+    this->trigger(std::move(container), response_body);
   }
 };
 
@@ -149,11 +149,21 @@ template<typename... Ts> class HttpRequestSendAction : public Action<Ts...> {
         }
         response_body.reserve(read_index);
         response_body.assign((char *) buf, read_index);
+        allocator.deallocate(buf, max_length);
       }
     }
 
-    for (auto *trigger : this->response_triggers_) {
-      trigger->process(container, response_body);
+    if (this->response_triggers_.size() == 1) {
+      // if there is only one trigger, no need to copy the response body
+      this->response_triggers_[0]->process(container, response_body);
+    } else {
+      for (auto *trigger : this->response_triggers_) {
+        // with multiple triggers, pass a copy of the response body to each
+        // one so that modifications made in one trigger are not visible to
+        // the others
+        auto response_body_copy = std::string(response_body);
+        trigger->process(container, response_body_copy);
+      }
     }
     container->end();
   }
diff --git a/esphome/components/http_request/http_request_arduino.cpp b/esphome/components/http_request/http_request_arduino.cpp
index 248a85a439..95b1cdc38e 100644
--- a/esphome/components/http_request/http_request_arduino.cpp
+++ b/esphome/components/http_request/http_request_arduino.cpp
@@ -32,6 +32,13 @@ std::shared_ptr<HttpContainer> HttpRequestArduino::start(std::string url, std::s
 
   watchdog::WatchdogManager wdm(this->get_watchdog_timeout());
 
+  if (this->follow_redirects_) {
+    container->client_.setFollowRedirects(HTTPC_FORCE_FOLLOW_REDIRECTS);
+    container->client_.setRedirectLimit(this->redirect_limit_);
+  } else {
+    container->client_.setFollowRedirects(HTTPC_DISABLE_FOLLOW_REDIRECTS);
+  }
+
 #if defined(USE_ESP8266)
   std::unique_ptr<WiFiClient> stream_ptr;
 #ifdef USE_HTTP_REQUEST_ESP8266_HTTPS
@@ -59,8 +66,6 @@ std::shared_ptr<HttpContainer> HttpRequestArduino::start(std::string url, std::s
                   "in your YAML, or use HTTPS");
   }
 #endif  // USE_ARDUINO_VERSION_CODE
-
-  container->client_.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
   bool status = container->client_.begin(*stream_ptr, url.c_str());
 
 #elif defined(USE_RP2040)
diff --git a/esphome/components/http_request/http_request_idf.cpp b/esphome/components/http_request/http_request_idf.cpp
index 138e0438f4..d6fac7a133 100644
--- a/esphome/components/http_request/http_request_idf.cpp
+++ b/esphome/components/http_request/http_request_idf.cpp
@@ -90,7 +90,7 @@ std::shared_ptr<HttpContainer> HttpRequestIDF::start(std::string url, std::strin
     int write_left = body_len;
     int write_index = 0;
     const char *buf = body.c_str();
-    while (body_len > 0) {
+    while (write_left > 0) {
       int written = esp_http_client_write(client, buf + write_index, write_left);
       if (written < 0) {
         err = ESP_FAIL;
diff --git a/esphome/components/http_request/update/http_request_update.cpp b/esphome/components/http_request/update/http_request_update.cpp
index 98129e59dc..0a14dfd933 100644
--- a/esphome/components/http_request/update/http_request_update.cpp
+++ b/esphome/components/http_request/update/http_request_update.cpp
@@ -116,19 +116,18 @@ void HttpRequestUpdate::update() {
     }
   }
 
-  std::string current_version = this->current_version_;
-  if (current_version.empty()) {
+  std::string current_version;
 #ifdef ESPHOME_PROJECT_VERSION
-    current_version = ESPHOME_PROJECT_VERSION;
+  current_version = ESPHOME_PROJECT_VERSION;
 #else
-    current_version = ESPHOME_VERSION;
+  current_version = ESPHOME_VERSION;
 #endif
-  }
+
   this->update_info_.current_version = current_version;
 
-  if (this->update_info_.latest_version.empty()) {
+  if (this->update_info_.latest_version.empty() || this->update_info_.latest_version == update_info_.current_version) {
     this->state_ = update::UPDATE_STATE_NO_UPDATE;
-  } else if (this->update_info_.latest_version != this->current_version_) {
+  } else {
     this->state_ = update::UPDATE_STATE_AVAILABLE;
   }
 
diff --git a/esphome/components/http_request/update/http_request_update.h b/esphome/components/http_request/update/http_request_update.h
index 1337822ecc..a6bc97392b 100644
--- a/esphome/components/http_request/update/http_request_update.h
+++ b/esphome/components/http_request/update/http_request_update.h
@@ -22,15 +22,12 @@ class HttpRequestUpdate : public update::UpdateEntity, public PollingComponent {
   void set_request_parent(HttpRequestComponent *request_parent) { this->request_parent_ = request_parent; }
   void set_ota_parent(OtaHttpRequestComponent *ota_parent) { this->ota_parent_ = ota_parent; }
 
-  void set_current_version(const std::string &current_version) { this->current_version_ = current_version; }
-
   float get_setup_priority() const override { return setup_priority::AFTER_WIFI; }
 
  protected:
   HttpRequestComponent *request_parent_;
   OtaHttpRequestComponent *ota_parent_;
   std::string source_url_;
-  std::string current_version_{""};
 };
 
 }  // namespace http_request
diff --git a/esphome/components/http_request/watchdog.cpp b/esphome/components/http_request/watchdog.cpp
index e609feb4dd..a8519c59ed 100644
--- a/esphome/components/http_request/watchdog.cpp
+++ b/esphome/components/http_request/watchdog.cpp
@@ -46,7 +46,7 @@ void WatchdogManager::set_timeout_(uint32_t timeout_ms) {
   };
   esp_task_wdt_reconfigure(&wdt_config);
 #else
-  esp_task_wdt_init(timeout_ms, true);
+  esp_task_wdt_init(timeout_ms / 1000, true);
 #endif  // ESP_IDF_VERSION_MAJOR
 #endif  // USE_ESP32
 
diff --git a/esphome/components/i2s_audio/microphone/__init__.py b/esphome/components/i2s_audio/microphone/__init__.py
index 5ee359dc26..d9c31e8e7b 100644
--- a/esphome/components/i2s_audio/microphone/__init__.py
+++ b/esphome/components/i2s_audio/microphone/__init__.py
@@ -2,7 +2,7 @@ import esphome.config_validation as cv
 import esphome.codegen as cg
 
 from esphome import pins
-from esphome.const import CONF_CHANNEL, CONF_ID, CONF_NUMBER
+from esphome.const import CONF_CHANNEL, CONF_ID, CONF_NUMBER, CONF_SAMPLE_RATE
 from esphome.components import microphone, esp32
 from esphome.components.adc import ESP32_VARIANT_ADC1_PIN_TO_CHANNEL, validate_adc_pin
 
@@ -20,7 +20,6 @@ DEPENDENCIES = ["i2s_audio"]
 CONF_ADC_PIN = "adc_pin"
 CONF_ADC_TYPE = "adc_type"
 CONF_PDM = "pdm"
-CONF_SAMPLE_RATE = "sample_rate"
 CONF_BITS_PER_SAMPLE = "bits_per_sample"
 CONF_USE_APLL = "use_apll"
 
diff --git a/esphome/components/ili9xxx/ili9xxx_display.cpp b/esphome/components/ili9xxx/ili9xxx_display.cpp
index 21d46ea825..de03df5d41 100644
--- a/esphome/components/ili9xxx/ili9xxx_display.cpp
+++ b/esphome/components/ili9xxx/ili9xxx_display.cpp
@@ -34,8 +34,8 @@ void ILI9XXXDisplay::setup() {
   ESP_LOGD(TAG, "Setting up ILI9xxx");
 
   this->setup_pins_();
-  this->init_lcd_(this->init_sequence_);
-  this->init_lcd_(this->extra_init_sequence_.data());
+  this->init_lcd(this->init_sequence_);
+  this->init_lcd(this->extra_init_sequence_.data());
   switch (this->pixel_mode_) {
     case PIXEL_MODE_16:
       if (this->is_18bitdisplay_) {
@@ -405,7 +405,7 @@ void ILI9XXXDisplay::reset_() {
   }
 }
 
-void ILI9XXXDisplay::init_lcd_(const uint8_t *addr) {
+void ILI9XXXDisplay::init_lcd(const uint8_t *addr) {
   if (addr == nullptr)
     return;
   uint8_t cmd, x, num_args;
@@ -427,6 +427,20 @@ void ILI9XXXDisplay::init_lcd_(const uint8_t *addr) {
   }
 }
 
+void ILI9XXXGC9A01A::init_lcd(const uint8_t *addr) {
+  if (addr == nullptr)
+    return;
+  uint8_t cmd, x, num_args;
+  while ((cmd = *addr++) != 0) {
+    x = *addr++;
+    num_args = x & 0x7F;
+    this->send_command(cmd, addr, num_args);
+    addr += num_args;
+    if (x & 0x80)
+      delay(150);  // NOLINT
+  }
+}
+
 // Tell the display controller where we want to draw pixels.
 void ILI9XXXDisplay::set_addr_window_(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) {
   x1 += this->offset_x_;
diff --git a/esphome/components/ili9xxx/ili9xxx_display.h b/esphome/components/ili9xxx/ili9xxx_display.h
index 7a320dac7b..b60047a8c3 100644
--- a/esphome/components/ili9xxx/ili9xxx_display.h
+++ b/esphome/components/ili9xxx/ili9xxx_display.h
@@ -109,7 +109,7 @@ class ILI9XXXDisplay : public display::DisplayBuffer,
 
   virtual void set_madctl();
   void display_();
-  void init_lcd_(const uint8_t *addr);
+  virtual void init_lcd(const uint8_t *addr);
   void set_addr_window_(uint16_t x, uint16_t y, uint16_t x2, uint16_t y2);
   void reset_();
 
@@ -269,6 +269,7 @@ class ILI9XXXS3BoxLite : public ILI9XXXDisplay {
 class ILI9XXXGC9A01A : public ILI9XXXDisplay {
  public:
   ILI9XXXGC9A01A() : ILI9XXXDisplay(INITCMD_GC9A01A, 240, 240, true) {}
+  void init_lcd(const uint8_t *addr) override;
 };
 
 //-----------   ILI9XXX_24_TFT display --------------
diff --git a/esphome/components/image/__init__.py b/esphome/components/image/__init__.py
index c275136427..e5a205f1e0 100644
--- a/esphome/components/image/__init__.py
+++ b/esphome/components/image/__init__.py
@@ -6,7 +6,6 @@ import hashlib
 import io
 from pathlib import Path
 import re
-import requests
 from magic import Magic
 
 from esphome import core
@@ -15,7 +14,6 @@ from esphome import external_files
 import esphome.config_validation as cv
 import esphome.codegen as cg
 from esphome.const import (
-    __version__,
     CONF_DITHER,
     CONF_FILE,
     CONF_ICON,
@@ -75,31 +73,6 @@ def compute_local_image_path(value: dict) -> Path:
     return base_dir / key
 
 
-def download_content(url: str, path: Path) -> None:
-    if not external_files.has_remote_file_changed(url, path):
-        _LOGGER.debug("Remote file has not changed %s", url)
-        return
-
-    _LOGGER.debug(
-        "Remote file has changed, downloading from %s to %s",
-        url,
-        path,
-    )
-
-    try:
-        req = requests.get(
-            url,
-            timeout=IMAGE_DOWNLOAD_TIMEOUT,
-            headers={"User-agent": f"ESPHome/{__version__} (https://esphome.io)"},
-        )
-        req.raise_for_status()
-    except requests.exceptions.RequestException as e:
-        raise cv.Invalid(f"Could not download from {url}: {e}")
-
-    path.parent.mkdir(parents=True, exist_ok=True)
-    path.write_bytes(req.content)
-
-
 def download_mdi(value):
     validate_cairosvg_installed(value)
 
@@ -108,7 +81,7 @@ def download_mdi(value):
 
     url = f"https://raw.githubusercontent.com/Templarian/MaterialDesign/master/svg/{mdi_id}.svg"
 
-    download_content(url, path)
+    external_files.download_content(url, path, IMAGE_DOWNLOAD_TIMEOUT)
 
     return value
 
@@ -117,7 +90,7 @@ def download_image(value):
     url = value[CONF_URL]
     path = compute_local_image_path(value)
 
-    download_content(url, path)
+    external_files.download_content(url, path, IMAGE_DOWNLOAD_TIMEOUT)
 
     return value
 
diff --git a/esphome/components/improv_serial/improv_serial_component.cpp b/esphome/components/improv_serial/improv_serial_component.cpp
index 2937720496..12809e38cb 100644
--- a/esphome/components/improv_serial/improv_serial_component.cpp
+++ b/esphome/components/improv_serial/improv_serial_component.cpp
@@ -57,7 +57,7 @@ optional<uint8_t> ImprovSerialComponent::read_byte_() {
         }
       }
       break;
-#if defined(CONFIG_ESP_CONSOLE_USB_CDC) && (defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3))
+#if defined(USE_LOGGER_USB_CDC) && defined(CONFIG_ESP_CONSOLE_USB_CDC)
     case logger::UART_SELECTION_USB_CDC:
 #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0)
       if (esp_usb_console_available_for_read()) {
@@ -68,15 +68,15 @@ optional<uint8_t> ImprovSerialComponent::read_byte_() {
         byte = data;
       }
       break;
-#endif  // USE_ESP32_VARIANT_ESP32S2 || USE_ESP32_VARIANT_ESP32S3
-#if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32S3)
+#endif  // USE_LOGGER_USB_CDC
+#ifdef USE_LOGGER_USB_SERIAL_JTAG
     case logger::UART_SELECTION_USB_SERIAL_JTAG: {
       if (usb_serial_jtag_read_bytes((char *) &data, 1, 0)) {
         byte = data;
       }
       break;
     }
-#endif  // USE_ESP32_VARIANT_ESP32C3 || USE_ESP32_VARIANT_ESP32C6 || USE_ESP32_VARIANT_ESP32S3
+#endif  // USE_LOGGER_USB_SERIAL_JTAG
     default:
       break;
   }
@@ -99,19 +99,20 @@ void ImprovSerialComponent::write_data_(std::vector<uint8_t> &data) {
 #endif  // !USE_ESP32_VARIANT_ESP32C3 && !USE_ESP32_VARIANT_ESP32S2 && !USE_ESP32_VARIANT_ESP32S3
       uart_write_bytes(this->uart_num_, data.data(), data.size());
       break;
-#if defined(CONFIG_ESP_CONSOLE_USB_CDC) && (defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3))
+#if defined(USE_LOGGER_USB_CDC) && defined(CONFIG_ESP_CONSOLE_USB_CDC)
     case logger::UART_SELECTION_USB_CDC: {
       const char *msg = (char *) data.data();
       esp_usb_console_write_buf(msg, data.size());
       break;
     }
-#endif  // USE_ESP32_VARIANT_ESP32S2 || USE_ESP32_VARIANT_ESP32S3
-#if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32S3)
+#endif  // USE_LOGGER_USB_CDC
+#ifdef USE_LOGGER_USB_SERIAL_JTAG
     case logger::UART_SELECTION_USB_SERIAL_JTAG:
       usb_serial_jtag_write_bytes((char *) data.data(), data.size(), 20 / portTICK_PERIOD_MS);
+      delay(10);
       usb_serial_jtag_ll_txfifo_flush();  // fixes for issue in IDF 4.4.7
       break;
-#endif  // USE_ESP32_VARIANT_ESP32C3 || USE_ESP32_VARIANT_ESP32S3
+#endif  // USE_LOGGER_USB_SERIAL_JTAG
     default:
       break;
   }
diff --git a/esphome/components/jsn_sr04t/jsn_sr04t.cpp b/esphome/components/jsn_sr04t/jsn_sr04t.cpp
index b96bf8f762..077d4e58ea 100644
--- a/esphome/components/jsn_sr04t/jsn_sr04t.cpp
+++ b/esphome/components/jsn_sr04t/jsn_sr04t.cpp
@@ -31,7 +31,16 @@ void Jsnsr04tComponent::loop() {
 }
 
 void Jsnsr04tComponent::check_buffer_() {
-  uint8_t checksum = this->buffer_[0] + this->buffer_[1] + this->buffer_[2];
+  uint8_t checksum = 0;
+  switch (this->model_) {
+    case JSN_SR04T:
+      checksum = this->buffer_[0] + this->buffer_[1] + this->buffer_[2];
+      break;
+    case AJ_SR04M:
+      checksum = this->buffer_[1] + this->buffer_[2];
+      break;
+  }
+
   if (this->buffer_[3] == checksum) {
     uint16_t distance = encode_uint16(this->buffer_[1], this->buffer_[2]);
     if (distance > 250) {
@@ -49,6 +58,14 @@ void Jsnsr04tComponent::check_buffer_() {
 
 void Jsnsr04tComponent::dump_config() {
   LOG_SENSOR("", "JST_SR04T Sensor", this);
+  switch (this->model_) {
+    case JSN_SR04T:
+      ESP_LOGCONFIG(TAG, "  sensor model: jsn_sr04t");
+      break;
+    case AJ_SR04M:
+      ESP_LOGCONFIG(TAG, "  sensor model: aj_sr04m");
+      break;
+  }
   LOG_UPDATE_INTERVAL(this);
 }
 
diff --git a/esphome/components/jsn_sr04t/jsn_sr04t.h b/esphome/components/jsn_sr04t/jsn_sr04t.h
index bd43252be8..2a22ff92ec 100644
--- a/esphome/components/jsn_sr04t/jsn_sr04t.h
+++ b/esphome/components/jsn_sr04t/jsn_sr04t.h
@@ -9,9 +9,14 @@
 namespace esphome {
 namespace jsn_sr04t {
 
+enum Model {
+  JSN_SR04T,
+  AJ_SR04M,
+};
+
 class Jsnsr04tComponent : public sensor::Sensor, public PollingComponent, public uart::UARTDevice {
  public:
-  // Nothing really public.
+  void set_model(Model model) { this->model_ = model; }
 
   // ========== INTERNAL METHODS ==========
   void update() override;
@@ -20,6 +25,7 @@ class Jsnsr04tComponent : public sensor::Sensor, public PollingComponent, public
 
  protected:
   void check_buffer_();
+  Model model_;
 
   std::vector<uint8_t> buffer_;
 };
diff --git a/esphome/components/jsn_sr04t/sensor.py b/esphome/components/jsn_sr04t/sensor.py
index 4b062e81e9..682cf06570 100644
--- a/esphome/components/jsn_sr04t/sensor.py
+++ b/esphome/components/jsn_sr04t/sensor.py
@@ -5,6 +5,7 @@ from esphome.const import (
     STATE_CLASS_MEASUREMENT,
     UNIT_METER,
     ICON_ARROW_EXPAND_VERTICAL,
+    CONF_MODEL,
 )
 
 CODEOWNERS = ["@Mafus1"]
@@ -14,6 +15,11 @@ jsn_sr04t_ns = cg.esphome_ns.namespace("jsn_sr04t")
 Jsnsr04tComponent = jsn_sr04t_ns.class_(
     "Jsnsr04tComponent", sensor.Sensor, cg.PollingComponent, uart.UARTDevice
 )
+Model = jsn_sr04t_ns.enum("Model")
+MODEL = {
+    "jsn_sr04t": Model.JSN_SR04T,
+    "aj_sr04m": Model.AJ_SR04M,
+}
 
 CONFIG_SCHEMA = (
     sensor.sensor_schema(
@@ -25,6 +31,11 @@ CONFIG_SCHEMA = (
     )
     .extend(cv.polling_component_schema("60s"))
     .extend(uart.UART_DEVICE_SCHEMA)
+    .extend(
+        {
+            cv.Optional(CONF_MODEL, default="jsn_sr04t"): cv.enum(MODEL, upper=False),
+        }
+    )
 )
 
 FINAL_VALIDATE_SCHEMA = uart.final_validate_device_schema(
@@ -42,3 +53,5 @@ async def to_code(config):
     var = await sensor.new_sensor(config)
     await cg.register_component(var, config)
     await uart.register_uart_device(var, config)
+
+    cg.add(var.set_model(config[CONF_MODEL]))
diff --git a/esphome/components/ledc/ledc_output.cpp b/esphome/components/ledc/ledc_output.cpp
index 1040ac25b6..90e11fe4ad 100644
--- a/esphome/components/ledc/ledc_output.cpp
+++ b/esphome/components/ledc/ledc_output.cpp
@@ -115,12 +115,15 @@ void LEDCOutput::write_state(float state) {
   const uint32_t max_duty = (uint32_t(1) << this->bit_depth_) - 1;
   const float duty_rounded = roundf(state * max_duty);
   auto duty = static_cast<uint32_t>(duty_rounded);
-
 #ifdef USE_ARDUINO
   ESP_LOGV(TAG, "Setting duty: %u on channel %u", duty, this->channel_);
   ledcWrite(this->channel_, duty);
 #endif
 #ifdef USE_ESP_IDF
+  // ensure that 100% on is not 99.975% on
+  if ((duty == max_duty) && (max_duty != 1)) {
+    duty = max_duty + 1;
+  }
   auto speed_mode = get_speed_mode(channel_);
   auto chan_num = static_cast<ledc_channel_t>(channel_ % 8);
   int hpoint = ledc_angle_to_htop(this->phase_angle_, this->bit_depth_);
diff --git a/esphome/components/ltr390/ltr390.cpp b/esphome/components/ltr390/ltr390.cpp
index 4eb1ff2c46..198d15ebd8 100644
--- a/esphome/components/ltr390/ltr390.cpp
+++ b/esphome/components/ltr390/ltr390.cpp
@@ -19,6 +19,7 @@ static const uint8_t LTR390_MAIN_STATUS = 0x07;
 
 static const float GAINVALUES[5] = {1.0, 3.0, 6.0, 9.0, 18.0};
 static const float RESOLUTIONVALUE[6] = {4.0, 2.0, 1.0, 0.5, 0.25, 0.125};
+static const uint8_t RESOLUTION_BITS[6] = {20, 19, 18, 17, 16, 13};
 
 // Request fastest measurement rate - will be slowed by device if conversion rate is slower.
 static const float RESOLUTION_SETTING[6] = {0x00, 0x10, 0x20, 0x30, 0x40, 0x50};
@@ -74,7 +75,7 @@ void LTR390Component::read_als_() {
   uint32_t als = *val;
 
   if (this->light_sensor_ != nullptr) {
-    float lux = ((0.6 * als) / (GAINVALUES[this->gain_] * RESOLUTIONVALUE[this->res_])) * this->wfac_;
+    float lux = ((0.6 * als) / (GAINVALUES[this->gain_als_] * RESOLUTIONVALUE[this->res_als_])) * this->wfac_;
     this->light_sensor_->publish_state(lux);
   }
 
@@ -90,7 +91,7 @@ void LTR390Component::read_uvs_() {
   uint32_t uv = *val;
 
   if (this->uvi_sensor_ != nullptr) {
-    this->uvi_sensor_->publish_state((uv / this->sensitivity_) * this->wfac_);
+    this->uvi_sensor_->publish_state((uv / this->sensitivity_uv_) * this->wfac_);
   }
 
   if (this->uv_sensor_ != nullptr) {
@@ -107,24 +108,38 @@ void LTR390Component::read_mode_(int mode_index) {
   ctrl[LTR390_CTRL_EN] = true;
   this->reg(LTR390_MAIN_CTRL) = ctrl.to_ulong();
 
-  // After the sensor integration time do the following
-  this->set_timeout(((uint32_t) RESOLUTIONVALUE[this->res_]) * 100 + LTR390_WAKEUP_TIME + LTR390_SETTLE_TIME,
-                    [this, mode_index]() {
-                      // Read from the sensor
-                      std::get<1>(this->mode_funcs_[mode_index])();
+  uint32_t int_time{0};
+  // Set gain, resolution and measurement rate
+  switch (mode) {
+    case LTR390_MODE_ALS:
+      this->reg(LTR390_GAIN) = this->gain_als_;
+      this->reg(LTR390_MEAS_RATE) = RESOLUTION_SETTING[this->res_als_];
+      int_time = ((uint32_t) RESOLUTIONVALUE[this->res_als_]) * 100;
+      break;
+    case LTR390_MODE_UVS:
+      this->reg(LTR390_GAIN) = this->gain_uv_;
+      this->reg(LTR390_MEAS_RATE) = RESOLUTION_SETTING[this->res_uv_];
+      int_time = ((uint32_t) RESOLUTIONVALUE[this->res_uv_]) * 100;
+      break;
+  }
 
-                      // If there are more modes to read then begin the next
-                      // otherwise stop
-                      if (mode_index + 1 < (int) this->mode_funcs_.size()) {
-                        this->read_mode_(mode_index + 1);
-                      } else {
-                        // put sensor in standby
-                        std::bitset<8> ctrl = this->reg(LTR390_MAIN_CTRL).get();
-                        ctrl[LTR390_CTRL_EN] = false;
-                        this->reg(LTR390_MAIN_CTRL) = ctrl.to_ulong();
-                        this->reading_ = false;
-                      }
-                    });
+  // After the sensor integration time do the following
+  this->set_timeout(int_time + LTR390_WAKEUP_TIME + LTR390_SETTLE_TIME, [this, mode_index]() {
+    // Read from the sensor
+    std::get<1>(this->mode_funcs_[mode_index])();
+
+    // If there are more modes to read then begin the next
+    // otherwise stop
+    if (mode_index + 1 < (int) this->mode_funcs_.size()) {
+      this->read_mode_(mode_index + 1);
+    } else {
+      // put sensor in standby
+      std::bitset<8> ctrl = this->reg(LTR390_MAIN_CTRL).get();
+      ctrl[LTR390_CTRL_EN] = false;
+      this->reg(LTR390_MAIN_CTRL) = ctrl.to_ulong();
+      this->reading_ = false;
+    }
+  });
 }
 
 void LTR390Component::setup() {
@@ -151,16 +166,10 @@ void LTR390Component::setup() {
     return;
   }
 
-  // Set gain
-  this->reg(LTR390_GAIN) = gain_;
-
-  // Set resolution and measurement rate
-  this->reg(LTR390_MEAS_RATE) = RESOLUTION_SETTING[this->res_];
-
   // Set sensitivity by linearly scaling against known value in the datasheet
-  float gain_scale = GAINVALUES[this->gain_] / GAIN_MAX;
-  float intg_scale = (RESOLUTIONVALUE[this->res_] * 100) / INTG_MAX;
-  this->sensitivity_ = SENSITIVITY_MAX * gain_scale * intg_scale;
+  float gain_scale_uv = GAINVALUES[this->gain_uv_] / GAIN_MAX;
+  float intg_scale_uv = (RESOLUTIONVALUE[this->res_uv_] * 100) / INTG_MAX;
+  this->sensitivity_uv_ = SENSITIVITY_MAX * gain_scale_uv * intg_scale_uv;
 
   // Set sensor read state
   this->reading_ = false;
@@ -176,7 +185,13 @@ void LTR390Component::setup() {
   }
 }
 
-void LTR390Component::dump_config() { LOG_I2C_DEVICE(this); }
+void LTR390Component::dump_config() {
+  LOG_I2C_DEVICE(this);
+  ESP_LOGCONFIG(TAG, "  ALS Gain: X%.0f", GAINVALUES[this->gain_als_]);
+  ESP_LOGCONFIG(TAG, "  ALS Resolution: %u-bit", RESOLUTION_BITS[this->res_als_]);
+  ESP_LOGCONFIG(TAG, "  UV Gain: X%.0f", GAINVALUES[this->gain_uv_]);
+  ESP_LOGCONFIG(TAG, "  UV Resolution: %u-bit", RESOLUTION_BITS[this->res_uv_]);
+}
 
 void LTR390Component::update() {
   if (!this->reading_ && !mode_funcs_.empty()) {
diff --git a/esphome/components/ltr390/ltr390.h b/esphome/components/ltr390/ltr390.h
index bc98518fe9..24afd3c411 100644
--- a/esphome/components/ltr390/ltr390.h
+++ b/esphome/components/ltr390/ltr390.h
@@ -49,8 +49,10 @@ class LTR390Component : public PollingComponent, public i2c::I2CDevice {
   void dump_config() override;
   void update() override;
 
-  void set_gain_value(LTR390GAIN gain) { this->gain_ = gain; }
-  void set_res_value(LTR390RESOLUTION res) { this->res_ = res; }
+  void set_als_gain_value(LTR390GAIN gain) { this->gain_als_ = gain; }
+  void set_uv_gain_value(LTR390GAIN gain) { this->gain_uv_ = gain; }
+  void set_als_res_value(LTR390RESOLUTION res) { this->res_als_ = res; }
+  void set_uv_res_value(LTR390RESOLUTION res) { this->res_uv_ = res; }
   void set_wfac_value(float wfac) { this->wfac_ = wfac; }
 
   void set_light_sensor(sensor::Sensor *light_sensor) { this->light_sensor_ = light_sensor; }
@@ -71,9 +73,11 @@ class LTR390Component : public PollingComponent, public i2c::I2CDevice {
   // a list of modes and corresponding read functions
   std::vector<std::tuple<LTR390MODE, std::function<void()>>> mode_funcs_;
 
-  LTR390GAIN gain_;
-  LTR390RESOLUTION res_;
-  float sensitivity_;
+  LTR390GAIN gain_als_;
+  LTR390GAIN gain_uv_;
+  LTR390RESOLUTION res_als_;
+  LTR390RESOLUTION res_uv_;
+  float sensitivity_uv_;
   float wfac_;
 
   sensor::Sensor *light_sensor_{nullptr};
diff --git a/esphome/components/ltr390/sensor.py b/esphome/components/ltr390/sensor.py
index 8b2676599c..62c3edf8cb 100644
--- a/esphome/components/ltr390/sensor.py
+++ b/esphome/components/ltr390/sensor.py
@@ -13,7 +13,7 @@ from esphome.const import (
     UNIT_LUX,
 )
 
-CODEOWNERS = ["@sjtrny"]
+CODEOWNERS = ["@sjtrny", "@latonita"]
 DEPENDENCIES = ["i2c"]
 
 ltr390_ns = cg.esphome_ns.namespace("ltr390")
@@ -76,8 +76,24 @@ CONFIG_SCHEMA = cv.All(
                 accuracy_decimals=1,
                 device_class=DEVICE_CLASS_EMPTY,
             ),
-            cv.Optional(CONF_GAIN, default="X18"): cv.enum(GAIN_OPTIONS),
-            cv.Optional(CONF_RESOLUTION, default=20): cv.enum(RES_OPTIONS),
+            cv.Optional(CONF_GAIN, default="X18"): cv.Any(
+                cv.enum(GAIN_OPTIONS),
+                cv.Schema(
+                    {
+                        cv.Required(CONF_AMBIENT_LIGHT): cv.enum(GAIN_OPTIONS),
+                        cv.Required(CONF_UV): cv.enum(GAIN_OPTIONS),
+                    }
+                ),
+            ),
+            cv.Optional(CONF_RESOLUTION, default=20): cv.Any(
+                cv.enum(RES_OPTIONS),
+                cv.Schema(
+                    {
+                        cv.Required(CONF_AMBIENT_LIGHT): cv.enum(RES_OPTIONS),
+                        cv.Required(CONF_UV): cv.enum(RES_OPTIONS),
+                    }
+                ),
+            ),
             cv.Optional(CONF_WINDOW_CORRECTION_FACTOR, default=1.0): cv.float_range(
                 min=1.0
             ),
@@ -101,11 +117,25 @@ async def to_code(config):
     await cg.register_component(var, config)
     await i2c.register_i2c_device(var, config)
 
-    cg.add(var.set_gain_value(config[CONF_GAIN]))
-    cg.add(var.set_res_value(config[CONF_RESOLUTION]))
     cg.add(var.set_wfac_value(config[CONF_WINDOW_CORRECTION_FACTOR]))
 
     for key, funcName in TYPES.items():
         if key in config:
             sens = await sensor.new_sensor(config[key])
             cg.add(getattr(var, funcName)(sens))
+
+    gain_value = config[CONF_GAIN]
+    if isinstance(gain_value, dict):
+        cg.add(var.set_als_gain_value(gain_value[CONF_AMBIENT_LIGHT]))
+        cg.add(var.set_uv_gain_value(gain_value[CONF_UV]))
+    else:
+        cg.add(var.set_als_gain_value(gain_value))
+        cg.add(var.set_uv_gain_value(gain_value))
+
+    res_value = config[CONF_RESOLUTION]
+    if isinstance(res_value, dict):
+        cg.add(var.set_als_res_value(res_value[CONF_AMBIENT_LIGHT]))
+        cg.add(var.set_uv_res_value(res_value[CONF_UV]))
+    else:
+        cg.add(var.set_als_res_value(res_value))
+        cg.add(var.set_uv_res_value(res_value))
diff --git a/esphome/components/mdns/__init__.py b/esphome/components/mdns/__init__.py
index 82cf087fdc..fb90986314 100644
--- a/esphome/components/mdns/__init__.py
+++ b/esphome/components/mdns/__init__.py
@@ -74,6 +74,9 @@ def mdns_service(
 
 @coroutine_with_priority(55.0)
 async def to_code(config):
+    if config[CONF_DISABLED] is True:
+        return
+
     if CORE.using_arduino:
         if CORE.is_esp32:
             cg.add_library("ESPmDNS", None)
@@ -92,9 +95,6 @@ async def to_code(config):
             path="components/mdns",
         )
 
-    if config[CONF_DISABLED]:
-        return
-
     cg.add_define("USE_MDNS")
 
     var = cg.new_Pvariable(config[CONF_ID])
diff --git a/esphome/components/mdns/mdns_component.cpp b/esphome/components/mdns/mdns_component.cpp
index e2e562670b..2fc09330cd 100644
--- a/esphome/components/mdns/mdns_component.cpp
+++ b/esphome/components/mdns/mdns_component.cpp
@@ -1,5 +1,6 @@
-#include "mdns_component.h"
 #include "esphome/core/defines.h"
+#ifdef USE_MDNS
+#include "mdns_component.h"
 #include "esphome/core/version.h"
 #include "esphome/core/application.h"
 #include "esphome/core/log.h"
@@ -125,3 +126,4 @@ void MDNSComponent::dump_config() {
 
 }  // namespace mdns
 }  // namespace esphome
+#endif
diff --git a/esphome/components/mdns/mdns_component.h b/esphome/components/mdns/mdns_component.h
index b2cb10db62..dfb5b72292 100644
--- a/esphome/components/mdns/mdns_component.h
+++ b/esphome/components/mdns/mdns_component.h
@@ -1,5 +1,6 @@
 #pragma once
-
+#include "esphome/core/defines.h"
+#ifdef USE_MDNS
 #include <string>
 #include <vector>
 #include "esphome/core/component.h"
@@ -46,3 +47,4 @@ class MDNSComponent : public Component {
 
 }  // namespace mdns
 }  // namespace esphome
+#endif
diff --git a/esphome/components/mdns/mdns_esp32.cpp b/esphome/components/mdns/mdns_esp32.cpp
index 6081c96637..8006eb27f1 100644
--- a/esphome/components/mdns/mdns_esp32.cpp
+++ b/esphome/components/mdns/mdns_esp32.cpp
@@ -1,4 +1,5 @@
-#ifdef USE_ESP32
+#include "esphome/core/defines.h"
+#if defined(USE_ESP32) && defined(USE_MDNS)
 
 #include <mdns.h>
 #include <cstring>
diff --git a/esphome/components/mdns/mdns_esp8266.cpp b/esphome/components/mdns/mdns_esp8266.cpp
index 5ff1b86341..7b6e7ec448 100644
--- a/esphome/components/mdns/mdns_esp8266.cpp
+++ b/esphome/components/mdns/mdns_esp8266.cpp
@@ -1,4 +1,5 @@
-#if defined(USE_ESP8266) && defined(USE_ARDUINO)
+#include "esphome/core/defines.h"
+#if defined(USE_ESP8266) && defined(USE_ARDUINO) && defined(USE_MDNS)
 
 #include <ESP8266mDNS.h>
 #include "esphome/components/network/ip_address.h"
diff --git a/esphome/components/mdns/mdns_host.cpp b/esphome/components/mdns/mdns_host.cpp
index 3f89146f02..78767ed136 100644
--- a/esphome/components/mdns/mdns_host.cpp
+++ b/esphome/components/mdns/mdns_host.cpp
@@ -1,4 +1,5 @@
-#ifdef USE_HOST
+#include "esphome/core/defines.h"
+#if defined(USE_HOST) && defined(USE_MDNS)
 
 #include "esphome/components/network/ip_address.h"
 #include "esphome/components/network/util.h"
diff --git a/esphome/components/mdns/mdns_libretiny.cpp b/esphome/components/mdns/mdns_libretiny.cpp
index ccb79c88b9..c9a9a289dd 100644
--- a/esphome/components/mdns/mdns_libretiny.cpp
+++ b/esphome/components/mdns/mdns_libretiny.cpp
@@ -1,4 +1,5 @@
-#ifdef USE_LIBRETINY
+#include "esphome/core/defines.h"
+#if defined(USE_LIBRETINY) && defined(USE_MDNS)
 
 #include "esphome/components/network/ip_address.h"
 #include "esphome/components/network/util.h"
diff --git a/esphome/components/mdns/mdns_rp2040.cpp b/esphome/components/mdns/mdns_rp2040.cpp
index 56afd6f5e1..89e668ee59 100644
--- a/esphome/components/mdns/mdns_rp2040.cpp
+++ b/esphome/components/mdns/mdns_rp2040.cpp
@@ -1,4 +1,5 @@
-#ifdef USE_RP2040
+#include "esphome/core/defines.h"
+#if defined(USE_RP2040) && defined(USE_MDNS)
 
 #include "esphome/components/network/ip_address.h"
 #include "esphome/components/network/util.h"
diff --git a/esphome/components/micro_wake_word/__init__.py b/esphome/components/micro_wake_word/__init__.py
index def2808e54..3d3459ccab 100644
--- a/esphome/components/micro_wake_word/__init__.py
+++ b/esphome/components/micro_wake_word/__init__.py
@@ -9,7 +9,7 @@ import requests
 import esphome.config_validation as cv
 import esphome.codegen as cg
 
-from esphome.core import CORE, HexInt, EsphomeError
+from esphome.core import CORE, HexInt
 
 from esphome.components import esp32, microphone
 from esphome import automation, git, external_files
@@ -41,9 +41,15 @@ CODEOWNERS = ["@kahrendt", "@jesserockz"]
 DEPENDENCIES = ["microphone"]
 DOMAIN = "micro_wake_word"
 
+
+CONF_FEATURE_STEP_SIZE = "feature_step_size"
+CONF_MODELS = "models"
+CONF_ON_WAKE_WORD_DETECTED = "on_wake_word_detected"
 CONF_PROBABILITY_CUTOFF = "probability_cutoff"
 CONF_SLIDING_WINDOW_AVERAGE_SIZE = "sliding_window_average_size"
-CONF_ON_WAKE_WORD_DETECTED = "on_wake_word_detected"
+CONF_SLIDING_WINDOW_SIZE = "sliding_window_size"
+CONF_TENSOR_ARENA_SIZE = "tensor_arena_size"
+CONF_VAD = "vad"
 
 TYPE_HTTP = "http"
 
@@ -98,12 +104,14 @@ GIT_SCHEMA = cv.All(
     _process_git_source,
 )
 
-KEY_WAKE_WORD = "wake_word"
+
 KEY_AUTHOR = "author"
-KEY_WEBSITE = "website"
-KEY_VERSION = "version"
 KEY_MICRO = "micro"
 KEY_MINIMUM_ESPHOME_VERSION = "minimum_esphome_version"
+KEY_TRAINED_LANGUAGES = "trained_languages"
+KEY_VERSION = "version"
+KEY_WAKE_WORD = "wake_word"
+KEY_WEBSITE = "website"
 
 MANIFEST_SCHEMA_V1 = cv.Schema(
     {
@@ -125,6 +133,29 @@ MANIFEST_SCHEMA_V1 = cv.Schema(
     }
 )
 
+MANIFEST_SCHEMA_V2 = cv.Schema(
+    {
+        cv.Required(CONF_TYPE): "micro",
+        cv.Required(CONF_MODEL): cv.string,
+        cv.Required(KEY_AUTHOR): cv.string,
+        cv.Required(KEY_VERSION): cv.All(cv.int_, 2),
+        cv.Required(KEY_WAKE_WORD): cv.string,
+        cv.Required(KEY_TRAINED_LANGUAGES): cv.ensure_list(cv.string),
+        cv.Optional(KEY_WEBSITE): cv.url,
+        cv.Required(KEY_MICRO): cv.Schema(
+            {
+                cv.Required(CONF_FEATURE_STEP_SIZE): cv.int_range(min=0, max=30),
+                cv.Required(CONF_TENSOR_ARENA_SIZE): cv.int_,
+                cv.Required(CONF_PROBABILITY_CUTOFF): cv.float_,
+                cv.Required(CONF_SLIDING_WINDOW_SIZE): cv.positive_int,
+                cv.Required(KEY_MINIMUM_ESPHOME_VERSION): cv.All(
+                    cv.version_number, cv.validate_esphome_version
+                ),
+            }
+        ),
+    }
+)
+
 
 def _compute_local_file_path(config: dict) -> Path:
     url = config[CONF_URL]
@@ -135,6 +166,24 @@ def _compute_local_file_path(config: dict) -> Path:
     return base_dir / key
 
 
+def _convert_manifest_v1_to_v2(v1_manifest):
+    v2_manifest = v1_manifest.copy()
+
+    v2_manifest[KEY_VERSION] = 2
+    v2_manifest[KEY_MICRO][CONF_SLIDING_WINDOW_SIZE] = v1_manifest[KEY_MICRO][
+        CONF_SLIDING_WINDOW_AVERAGE_SIZE
+    ]
+    del v2_manifest[KEY_MICRO][CONF_SLIDING_WINDOW_AVERAGE_SIZE]
+    v2_manifest[KEY_MICRO][
+        CONF_TENSOR_ARENA_SIZE
+    ] = 45672  # Original Inception-based V1 manifest models require a minimum of 45672 bytes
+    v2_manifest[KEY_MICRO][
+        CONF_FEATURE_STEP_SIZE
+    ] = 20  # Original Inception-based V1 manifest models use a 20 ms feature step size
+
+    return v2_manifest
+
+
 def _download_file(url: str, path: Path) -> bytes:
     if not external_files.has_remote_file_changed(url, path):
         _LOGGER.debug("Remote file has not changed, skipping download")
@@ -155,6 +204,24 @@ def _download_file(url: str, path: Path) -> bytes:
     return req.content
 
 
+def _validate_manifest_version(manifest_data):
+    if manifest_version := manifest_data.get(KEY_VERSION):
+        if manifest_version == 1:
+            try:
+                MANIFEST_SCHEMA_V1(manifest_data)
+            except cv.Invalid as e:
+                raise cv.Invalid(f"Invalid manifest file: {e}") from e
+        elif manifest_version == 2:
+            try:
+                MANIFEST_SCHEMA_V2(manifest_data)
+            except cv.Invalid as e:
+                raise cv.Invalid(f"Invalid manifest file: {e}") from e
+        else:
+            raise cv.Invalid("Invalid manifest version")
+    else:
+        raise cv.Invalid("Invalid manifest file, missing 'version' key.")
+
+
 def _process_http_source(config):
     url = config[CONF_URL]
     path = _compute_local_file_path(config)
@@ -167,11 +234,6 @@ def _process_http_source(config):
     if not isinstance(manifest_data, dict):
         raise cv.Invalid("Manifest file must contain a JSON object")
 
-    try:
-        MANIFEST_SCHEMA_V1(manifest_data)
-    except cv.Invalid as e:
-        raise cv.Invalid(f"Invalid manifest file: {e}") from e
-
     model = manifest_data[CONF_MODEL]
     model_url = urljoin(url, model)
 
@@ -206,7 +268,7 @@ def _validate_source_model_name(value):
     return MODEL_SOURCE_SCHEMA(
         {
             CONF_TYPE: TYPE_HTTP,
-            CONF_URL: f"https://github.com/esphome/micro-wake-word-models/raw/main/models/{value}.json",
+            CONF_URL: f"https://github.com/esphome/micro-wake-word-models/raw/main/models/v2/{value}.json",
         }
     )
 
@@ -260,18 +322,55 @@ MODEL_SOURCE_SCHEMA = cv.Any(
     msg="Not a valid model name, local path, http(s) url, or github shorthand",
 )
 
+MODEL_SCHEMA = cv.Schema(
+    {
+        cv.Optional(CONF_MODEL): MODEL_SOURCE_SCHEMA,
+        cv.Optional(CONF_PROBABILITY_CUTOFF): cv.percentage,
+        cv.Optional(CONF_SLIDING_WINDOW_SIZE): cv.positive_int,
+        cv.GenerateID(CONF_RAW_DATA_ID): cv.declare_id(cg.uint8),
+    }
+)
+
+# Provide a default VAD model that could be overridden
+VAD_MODEL_SCHEMA = MODEL_SCHEMA.extend(
+    cv.Schema(
+        {
+            cv.Optional(
+                CONF_MODEL,
+                default="vad",
+            ): MODEL_SOURCE_SCHEMA,
+        }
+    )
+)
+
+
+def _maybe_empty_vad_schema(value):
+    # Idea borrowed from uart/__init__.py's ``maybe_empty_debug`` function. Accessed 2 July 2024.
+    # Loads a default VAD model without any parameters overridden.
+    if value is None:
+        value = {}
+    return VAD_MODEL_SCHEMA(value)
+
+
 CONFIG_SCHEMA = cv.All(
     cv.Schema(
         {
             cv.GenerateID(): cv.declare_id(MicroWakeWord),
             cv.GenerateID(CONF_MICROPHONE): cv.use_id(microphone.Microphone),
-            cv.Optional(CONF_PROBABILITY_CUTOFF): cv.percentage,
-            cv.Optional(CONF_SLIDING_WINDOW_AVERAGE_SIZE): cv.positive_int,
+            cv.Required(CONF_MODELS): cv.ensure_list(MODEL_SCHEMA),
             cv.Optional(CONF_ON_WAKE_WORD_DETECTED): automation.validate_automation(
                 single=True
             ),
-            cv.Required(CONF_MODEL): MODEL_SOURCE_SCHEMA,
-            cv.GenerateID(CONF_RAW_DATA_ID): cv.declare_id(cg.uint8),
+            cv.Optional(CONF_VAD): _maybe_empty_vad_schema,
+            cv.Optional(CONF_MODEL): cv.invalid(
+                f"The {CONF_MODEL} parameter has moved to be a list element under the {CONF_MODELS} parameter."
+            ),
+            cv.Optional(CONF_PROBABILITY_CUTOFF): cv.invalid(
+                f"The {CONF_PROBABILITY_CUTOFF} parameter has moved to be a list element under the {CONF_MODELS} parameter."
+            ),
+            cv.Optional(CONF_SLIDING_WINDOW_AVERAGE_SIZE): cv.invalid(
+                f"The {CONF_SLIDING_WINDOW_AVERAGE_SIZE} parameter has been renamed to {CONF_SLIDING_WINDOW_SIZE} and moved to be a list element under the {CONF_MODELS} parameter."
+            ),
         }
     ).extend(cv.COMPONENT_SCHEMA),
     cv.only_with_esp_idf,
@@ -282,44 +381,20 @@ def _load_model_data(manifest_path: Path):
     with open(manifest_path, encoding="utf-8") as f:
         manifest = json.load(f)
 
-    try:
-        MANIFEST_SCHEMA_V1(manifest)
-    except cv.Invalid as e:
-        raise EsphomeError(f"Invalid manifest file: {e}") from e
+    _validate_manifest_version(manifest)
 
     model_path = manifest_path.parent / manifest[CONF_MODEL]
 
     with open(model_path, "rb") as f:
         model = f.read()
 
+    if manifest.get(KEY_VERSION) == 1:
+        manifest = _convert_manifest_v1_to_v2(manifest)
+
     return manifest, model
 
 
-async def to_code(config):
-    var = cg.new_Pvariable(config[CONF_ID])
-    await cg.register_component(var, config)
-
-    mic = await cg.get_variable(config[CONF_MICROPHONE])
-    cg.add(var.set_microphone(mic))
-
-    if on_wake_word_detection_config := config.get(CONF_ON_WAKE_WORD_DETECTED):
-        await automation.build_automation(
-            var.get_wake_word_detected_trigger(),
-            [(cg.std_string, "wake_word")],
-            on_wake_word_detection_config,
-        )
-
-    esp32.add_idf_component(
-        name="esp-tflite-micro",
-        repo="https://github.com/espressif/esp-tflite-micro",
-    )
-
-    cg.add_build_flag("-DTF_LITE_STATIC_MEMORY")
-    cg.add_build_flag("-DTF_LITE_DISABLE_X86_NEON")
-    cg.add_build_flag("-DESP_NN")
-
-    model_config = config.get(CONF_MODEL)
-    data = []
+def _model_config_to_manifest_data(model_config):
     if model_config[CONF_TYPE] == TYPE_GIT:
         # compute path to model file
         key = f"{model_config[CONF_URL]}@{model_config.get(CONF_REF)}"
@@ -337,23 +412,95 @@ async def to_code(config):
     else:
         raise ValueError("Unsupported config type: {model_config[CONF_TYPE]}")
 
-    manifest, data = _load_model_data(file)
+    return _load_model_data(file)
 
-    rhs = [HexInt(x) for x in data]
-    prog_arr = cg.progmem_array(config[CONF_RAW_DATA_ID], rhs)
-    cg.add(var.set_model_start(prog_arr))
 
-    probability_cutoff = config.get(
-        CONF_PROBABILITY_CUTOFF, manifest[KEY_MICRO][CONF_PROBABILITY_CUTOFF]
+def _feature_step_size_validate(config):
+    features_step_size = None
+
+    for model_parameters in config[CONF_MODELS]:
+        model_config = model_parameters.get(CONF_MODEL)
+        manifest, _ = _model_config_to_manifest_data(model_config)
+
+        model_step_size = manifest[KEY_MICRO][CONF_FEATURE_STEP_SIZE]
+
+        if features_step_size is None:
+            features_step_size = model_step_size
+        elif features_step_size != model_step_size:
+            raise cv.Invalid("Cannot load models with different features step sizes.")
+
+
+FINAL_VALIDATE_SCHEMA = _feature_step_size_validate
+
+
+async def to_code(config):
+    var = cg.new_Pvariable(config[CONF_ID])
+    await cg.register_component(var, config)
+
+    mic = await cg.get_variable(config[CONF_MICROPHONE])
+    cg.add(var.set_microphone(mic))
+
+    esp32.add_idf_component(
+        name="esp-tflite-micro",
+        repo="https://github.com/espressif/esp-tflite-micro",
+        ref="v1.3.1",
     )
-    cg.add(var.set_probability_cutoff(probability_cutoff))
-    sliding_window_average_size = config.get(
-        CONF_SLIDING_WINDOW_AVERAGE_SIZE,
-        manifest[KEY_MICRO][CONF_SLIDING_WINDOW_AVERAGE_SIZE],
-    )
-    cg.add(var.set_sliding_window_average_size(sliding_window_average_size))
 
-    cg.add(var.set_wake_word(manifest[KEY_WAKE_WORD]))
+    cg.add_build_flag("-DTF_LITE_STATIC_MEMORY")
+    cg.add_build_flag("-DTF_LITE_DISABLE_X86_NEON")
+    cg.add_build_flag("-DESP_NN")
+
+    if on_wake_word_detection_config := config.get(CONF_ON_WAKE_WORD_DETECTED):
+        await automation.build_automation(
+            var.get_wake_word_detected_trigger(),
+            [(cg.std_string, "wake_word")],
+            on_wake_word_detection_config,
+        )
+
+    if vad_model := config.get(CONF_VAD):
+        cg.add_define("USE_MICRO_WAKE_WORD_VAD")
+
+        # Use the general model loading code for the VAD codegen
+        config[CONF_MODELS].append(vad_model)
+
+    for model_parameters in config[CONF_MODELS]:
+        model_config = model_parameters.get(CONF_MODEL)
+        data = []
+        manifest, data = _model_config_to_manifest_data(model_config)
+
+        rhs = [HexInt(x) for x in data]
+        prog_arr = cg.progmem_array(model_parameters[CONF_RAW_DATA_ID], rhs)
+
+        probability_cutoff = model_parameters.get(
+            CONF_PROBABILITY_CUTOFF, manifest[KEY_MICRO][CONF_PROBABILITY_CUTOFF]
+        )
+        sliding_window_size = model_parameters.get(
+            CONF_SLIDING_WINDOW_SIZE,
+            manifest[KEY_MICRO][CONF_SLIDING_WINDOW_SIZE],
+        )
+
+        if manifest[KEY_WAKE_WORD] == "vad":
+            cg.add(
+                var.add_vad_model(
+                    prog_arr,
+                    probability_cutoff,
+                    sliding_window_size,
+                    manifest[KEY_MICRO][CONF_TENSOR_ARENA_SIZE],
+                )
+            )
+        else:
+            cg.add(
+                var.add_wake_word_model(
+                    prog_arr,
+                    probability_cutoff,
+                    sliding_window_size,
+                    manifest[KEY_WAKE_WORD],
+                    manifest[KEY_MICRO][CONF_TENSOR_ARENA_SIZE],
+                )
+            )
+
+    cg.add(var.set_features_step_size(manifest[KEY_MICRO][CONF_FEATURE_STEP_SIZE]))
+    cg.add_library("kahrendt/ESPMicroSpeechFeatures", "1.0.0")
 
 
 MICRO_WAKE_WORD_ACTION_SCHEMA = cv.Schema({cv.GenerateID(): cv.use_id(MicroWakeWord)})
diff --git a/esphome/components/micro_wake_word/audio_preprocessor_int8_model_data.h b/esphome/components/micro_wake_word/audio_preprocessor_int8_model_data.h
deleted file mode 100644
index 918e76045f..0000000000
--- a/esphome/components/micro_wake_word/audio_preprocessor_int8_model_data.h
+++ /dev/null
@@ -1,493 +0,0 @@
-#pragma once
-
-#ifdef USE_ESP_IDF
-
-// Converted audio_preprocessor_int8.tflite
-// From https://github.com/tensorflow/tflite-micro/tree/main/tensorflow/lite/micro/examples/micro_speech/models accessed
-// January 2024
-//
-// Copyright 2023 The TensorFlow Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-namespace esphome {
-namespace micro_wake_word {
-
-const unsigned char G_AUDIO_PREPROCESSOR_INT8_TFLITE[] = {
-    0x1c, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x14, 0x00, 0x20, 0x00, 0x1c, 0x00, 0x18, 0x00, 0x14, 0x00, 0x10,
-    0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x88, 0x00,
-    0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x80, 0x0e, 0x00, 0x00, 0x90, 0x0e, 0x00, 0x00, 0xcc, 0x1f, 0x00, 0x00, 0x03,
-    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xe2, 0xeb, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00,
-    0x1c, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67,
-    0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x94, 0xff,
-    0xff, 0xff, 0x2a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x70, 0x75,
-    0x74, 0x5f, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xc2, 0xf5, 0xff, 0xff,
-    0x04, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65,
-    0x00, 0x02, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xdc, 0xff, 0xff, 0xff, 0x2d, 0x00,
-    0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f,
-    0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00,
-    0x08, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x6d, 0x69, 0x6e,
-    0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x2e, 0x00,
-    0x00, 0x00, 0x9c, 0x0d, 0x00, 0x00, 0x94, 0x0d, 0x00, 0x00, 0xc4, 0x09, 0x00, 0x00, 0x6c, 0x09, 0x00, 0x00, 0x48,
-    0x09, 0x00, 0x00, 0x34, 0x09, 0x00, 0x00, 0x20, 0x09, 0x00, 0x00, 0x0c, 0x09, 0x00, 0x00, 0xf8, 0x08, 0x00, 0x00,
-    0xec, 0x07, 0x00, 0x00, 0x88, 0x07, 0x00, 0x00, 0x24, 0x07, 0x00, 0x00, 0xc0, 0x06, 0x00, 0x00, 0x38, 0x04, 0x00,
-    0x00, 0xb0, 0x01, 0x00, 0x00, 0x9c, 0x01, 0x00, 0x00, 0x88, 0x01, 0x00, 0x00, 0x74, 0x01, 0x00, 0x00, 0x60, 0x01,
-    0x00, 0x00, 0x4c, 0x01, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x3c, 0x01, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, 0x2c,
-    0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, 0x1c, 0x01, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00,
-    0x04, 0x01, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00,
-    0x00, 0xdc, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0xbc, 0x00,
-    0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x94,
-    0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xf2, 0xf6, 0xff, 0xff,
-    0x04, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04,
-    0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x08, 0x00,
-    0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x0a, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-    0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x32, 0x2e, 0x31, 0x32, 0x2e, 0x30, 0x00,
-    0x00, 0x56, 0xf7, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x32, 0x2e, 0x38, 0x2e, 0x30, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0xe1, 0xff, 0xff, 0xd8, 0xe1, 0xff, 0xff, 0xdc,
-    0xe1, 0xff, 0xff, 0xe0, 0xe1, 0xff, 0xff, 0xe4, 0xe1, 0xff, 0xff, 0xe8, 0xe1, 0xff, 0xff, 0xec, 0xe1, 0xff, 0xff,
-    0xf0, 0xe1, 0xff, 0xff, 0xf4, 0xe1, 0xff, 0xff, 0xf8, 0xe1, 0xff, 0xff, 0xfc, 0xe1, 0xff, 0xff, 0x00, 0xe2, 0xff,
-    0xff, 0x04, 0xe2, 0xff, 0xff, 0x08, 0xe2, 0xff, 0xff, 0x0c, 0xe2, 0xff, 0xff, 0x10, 0xe2, 0xff, 0xff, 0x14, 0xe2,
-    0xff, 0xff, 0x18, 0xe2, 0xff, 0xff, 0x1c, 0xe2, 0xff, 0xff, 0x20, 0xe2, 0xff, 0xff, 0x24, 0xe2, 0xff, 0xff, 0x28,
-    0xe2, 0xff, 0xff, 0x2c, 0xe2, 0xff, 0xff, 0x30, 0xe2, 0xff, 0xff, 0xd2, 0xf7, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
-    0x04, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0xe2, 0xf7, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
-    0x00, 0x00, 0x01, 0x00, 0x00, 0xf2, 0xf7, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0xff,
-    0xff, 0xff, 0x02, 0xf8, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x12,
-    0xf8, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x22, 0xf8, 0xff, 0xff,
-    0x04, 0x00, 0x00, 0x00, 0x78, 0x02, 0x00, 0x00, 0x00, 0x00, 0x61, 0x05, 0x00, 0x00, 0x00, 0x00, 0x23, 0x0b, 0x41,
-    0x01, 0x00, 0x00, 0x00, 0x00, 0xb3, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x0e, 0x80, 0x05,
-    0x00, 0x00, 0x00, 0x00, 0xd1, 0x0c, 0x63, 0x04, 0x00, 0x00, 0x00, 0x00, 0x34, 0x0c, 0x3f, 0x04, 0x00, 0x00, 0x00,
-    0x00, 0x81, 0x0c, 0xf7, 0x04, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x0d, 0x77, 0x06, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x0f,
-    0xa9, 0x08, 0x01, 0x02, 0x7f, 0x0b, 0x22, 0x05, 0x00, 0x00, 0x00, 0x00, 0xe9, 0x0e, 0xd1, 0x08, 0xdb, 0x02, 0x00,
-    0x00, 0x00, 0x00, 0x03, 0x0d, 0x4a, 0x07, 0xad, 0x01, 0x2c, 0x0c, 0xc6, 0x06, 0x79, 0x01, 0x00, 0x00, 0x00, 0x00,
-    0x45, 0x0c, 0x29, 0x07, 0x23, 0x02, 0x34, 0x0d, 0x5b, 0x08, 0x96, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe5, 0x0e, 0x48,
-    0x0a, 0xbd, 0x05, 0x45, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0x0c, 0x88, 0x08, 0x43, 0x04,
-    0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe9, 0x0b, 0xd3, 0x07, 0xcb, 0x03, 0xd2, 0x0f, 0xe7,
-    0x0b, 0x09, 0x08, 0x39, 0x04, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x0c, 0x14, 0x09,
-    0x75, 0x05, 0xe2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x0e, 0xdd, 0x0a, 0x6b, 0x07, 0x03,
-    0x04, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x0d, 0x09, 0x0a, 0xc9, 0x06, 0x93, 0x03, 0x65, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x0d, 0x25, 0x0a, 0x12, 0x07, 0x07, 0x04, 0x05, 0x01, 0x00, 0x00, 0x00,
-    0x00, 0x0a, 0x0e, 0x17, 0x0b, 0x2c, 0x08, 0x49, 0x05, 0x6d, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x98, 0x0f, 0xcb, 0x0c, 0x04, 0x0a, 0x44, 0x07, 0x8b, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x0f, 0x87,
-    0x0c, 0xe7, 0x09, 0x4e, 0x07, 0xba, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x00, 0x00, 0xa5, 0x0f, 0x23, 0x0d, 0xa7, 0x0a,
-    0x30, 0x08, 0xbe, 0x05, 0x52, 0x03, 0xeb, 0x00, 0x89, 0x0e, 0x2c, 0x0c, 0xd4, 0x09, 0x81, 0x07, 0x33, 0x05, 0xe9,
-    0x02, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x0e, 0x29, 0x0c, 0xf1, 0x09, 0xbe, 0x07, 0x90, 0x05, 0x65, 0x03,
-    0x3f, 0x01, 0x1d, 0x0f, 0xff, 0x0c, 0xe5, 0x0a, 0xcf, 0x08, 0xbc, 0x06, 0xae, 0x04, 0xa3, 0x02, 0x9c, 0x00, 0x99,
-    0x0e, 0x99, 0x0c, 0x9d, 0x0a, 0xa4, 0x08, 0xaf, 0x06, 0xbd, 0x04, 0xcf, 0x02, 0xe4, 0x00, 0xfc, 0x0e, 0x17, 0x0d,
-    0x36, 0x0b, 0x57, 0x09, 0x7c, 0x07, 0xa4, 0x05, 0xcf, 0x03, 0xfd, 0x01, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x62, 0x0e, 0x98, 0x0c, 0xd2, 0x0a, 0x0e, 0x09, 0x4d, 0x07, 0x8f, 0x05, 0xd4, 0x03, 0x1b, 0x02,
-    0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb1, 0x0e, 0x00, 0x0d, 0x52, 0x0b, 0xa6, 0x09, 0xfd, 0x07, 0x56, 0x06, 0xb1,
-    0x04, 0x0f, 0x03, 0x6f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd2, 0x0f, 0x37, 0x0e, 0x9e, 0x0c,
-    0x08, 0x0b, 0x73, 0x09, 0xe1, 0x07, 0x52, 0x06, 0xc4, 0x04, 0x38, 0x03, 0xaf, 0x01, 0x28, 0x00, 0xa3, 0x0e, 0x1f,
-    0x0d, 0x9e, 0x0b, 0x1f, 0x0a, 0xa2, 0x08, 0x27, 0x07, 0xae, 0x05, 0x37, 0x04, 0xc2, 0x02, 0x4e, 0x01, 0x00, 0x00,
-    0x00, 0x00, 0xdd, 0x0f, 0x6d, 0x0e, 0xff, 0x0c, 0x93, 0x0b, 0x29, 0x0a, 0xc1, 0x08, 0x5a, 0x07, 0xf5, 0x05, 0x92,
-    0x04, 0x30, 0x03, 0xd1, 0x01, 0x73, 0x00, 0x16, 0x0f, 0xbc, 0x0d, 0x62, 0x0c, 0x0b, 0x0b, 0xb5, 0x09, 0x61, 0x08,
-    0x0e, 0x07, 0xbd, 0x05, 0x6d, 0x04, 0x1f, 0x03, 0xd3, 0x01, 0x88, 0x00, 0x3e, 0x0f, 0xf6, 0x0d, 0xaf, 0x0c, 0x6a,
-    0x0b, 0x27, 0x0a, 0xe4, 0x08, 0xa3, 0x07, 0x64, 0x06, 0x26, 0x05, 0xe9, 0x03, 0xae, 0x02, 0x74, 0x01, 0x3b, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0f, 0xce, 0x0d, 0x99, 0x0c, 0x66, 0x0b, 0x34, 0x0a, 0x03,
-    0x09, 0xd3, 0x07, 0xa5, 0x06, 0x78, 0x05, 0x4c, 0x04, 0x22, 0x03, 0xf8, 0x01, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0xa9, 0x0f, 0x83, 0x0e, 0x5f, 0x0d, 0x3b, 0x0c, 0x19, 0x0b, 0xf8, 0x09, 0xd8, 0x08, 0xb9, 0x07, 0x9b, 0x06, 0x7e,
-    0x05, 0x63, 0x04, 0x48, 0x03, 0x2f, 0x02, 0x17, 0x01, 0x00, 0x00, 0x00, 0x00, 0xa6, 0xfa, 0xff, 0xff, 0x04, 0x00,
-    0x00, 0x00, 0x78, 0x02, 0x00, 0x00, 0x00, 0x00, 0x9e, 0x0a, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x04, 0xbe, 0x0e, 0x00,
-    0x00, 0x00, 0x00, 0x4c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x01, 0x7f, 0x0a, 0x00, 0x00,
-    0x00, 0x00, 0x2e, 0x03, 0x9c, 0x0b, 0x00, 0x00, 0x00, 0x00, 0xcb, 0x03, 0xc0, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x7e,
-    0x03, 0x08, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x60, 0x02, 0x88, 0x09, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x56, 0x07,
-    0xfe, 0x0d, 0x80, 0x04, 0xdd, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x16, 0x01, 0x2e, 0x07, 0x24, 0x0d, 0x00, 0x00, 0x00,
-    0x00, 0xfc, 0x02, 0xb5, 0x08, 0x52, 0x0e, 0xd3, 0x03, 0x39, 0x09, 0x86, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xba, 0x03,
-    0xd6, 0x08, 0xdc, 0x0d, 0xcb, 0x02, 0xa4, 0x07, 0x69, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x01, 0xb7, 0x05, 0x42,
-    0x0a, 0xba, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x03, 0x77, 0x07, 0xbc, 0x0b, 0xf1, 0x0f,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x04, 0x2c, 0x08, 0x34, 0x0c, 0x2d, 0x00, 0x18, 0x04, 0xf6,
-    0x07, 0xc6, 0x0b, 0x89, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x03, 0xeb, 0x06, 0x8a, 0x0a,
-    0x1d, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0x01, 0x22, 0x05, 0x94, 0x08, 0xfc, 0x0b, 0x59,
-    0x0f, 0x00, 0x00, 0x00, 0x00, 0xac, 0x02, 0xf6, 0x05, 0x36, 0x09, 0x6c, 0x0c, 0x9a, 0x0f, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0xbe, 0x02, 0xda, 0x05, 0xed, 0x08, 0xf8, 0x0b, 0xfa, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xf5,
-    0x01, 0xe8, 0x04, 0xd3, 0x07, 0xb6, 0x0a, 0x92, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x00,
-    0x34, 0x03, 0xfb, 0x05, 0xbb, 0x08, 0x74, 0x0b, 0x27, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x78, 0x03, 0x18,
-    0x06, 0xb1, 0x08, 0x45, 0x0b, 0xd2, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0xdc, 0x02, 0x58, 0x05, 0xcf, 0x07,
-    0x41, 0x0a, 0xad, 0x0c, 0x14, 0x0f, 0x76, 0x01, 0xd3, 0x03, 0x2b, 0x06, 0x7e, 0x08, 0xcc, 0x0a, 0x16, 0x0d, 0x5a,
-    0x0f, 0x00, 0x00, 0x00, 0x00, 0x9b, 0x01, 0xd6, 0x03, 0x0e, 0x06, 0x41, 0x08, 0x6f, 0x0a, 0x9a, 0x0c, 0xc0, 0x0e,
-    0xe2, 0x00, 0x00, 0x03, 0x1a, 0x05, 0x30, 0x07, 0x43, 0x09, 0x51, 0x0b, 0x5c, 0x0d, 0x63, 0x0f, 0x66, 0x01, 0x66,
-    0x03, 0x62, 0x05, 0x5b, 0x07, 0x50, 0x09, 0x42, 0x0b, 0x30, 0x0d, 0x1b, 0x0f, 0x03, 0x01, 0xe8, 0x02, 0xc9, 0x04,
-    0xa8, 0x06, 0x83, 0x08, 0x5b, 0x0a, 0x30, 0x0c, 0x02, 0x0e, 0xd1, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x9d, 0x01, 0x67, 0x03, 0x2d, 0x05, 0xf1, 0x06, 0xb2, 0x08, 0x70, 0x0a, 0x2b, 0x0c, 0xe4, 0x0d, 0x9a, 0x0f,
-    0x00, 0x00, 0x00, 0x00, 0x4e, 0x01, 0xff, 0x02, 0xad, 0x04, 0x59, 0x06, 0x02, 0x08, 0xa9, 0x09, 0x4e, 0x0b, 0xf0,
-    0x0c, 0x90, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0xc8, 0x01, 0x61, 0x03, 0xf7, 0x04,
-    0x8c, 0x06, 0x1e, 0x08, 0xad, 0x09, 0x3b, 0x0b, 0xc7, 0x0c, 0x50, 0x0e, 0xd7, 0x0f, 0x5c, 0x01, 0xe0, 0x02, 0x61,
-    0x04, 0xe0, 0x05, 0x5d, 0x07, 0xd8, 0x08, 0x51, 0x0a, 0xc8, 0x0b, 0x3d, 0x0d, 0xb1, 0x0e, 0x00, 0x00, 0x00, 0x00,
-    0x22, 0x00, 0x92, 0x01, 0x00, 0x03, 0x6c, 0x04, 0xd6, 0x05, 0x3e, 0x07, 0xa5, 0x08, 0x0a, 0x0a, 0x6d, 0x0b, 0xcf,
-    0x0c, 0x2e, 0x0e, 0x8c, 0x0f, 0xe9, 0x00, 0x43, 0x02, 0x9d, 0x03, 0xf4, 0x04, 0x4a, 0x06, 0x9e, 0x07, 0xf1, 0x08,
-    0x42, 0x0a, 0x92, 0x0b, 0xe0, 0x0c, 0x2c, 0x0e, 0x77, 0x0f, 0xc1, 0x00, 0x09, 0x02, 0x50, 0x03, 0x95, 0x04, 0xd8,
-    0x05, 0x1b, 0x07, 0x5c, 0x08, 0x9b, 0x09, 0xd9, 0x0a, 0x16, 0x0c, 0x51, 0x0d, 0x8b, 0x0e, 0xc4, 0x0f, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x31, 0x02, 0x66, 0x03, 0x99, 0x04, 0xcb, 0x05, 0xfc, 0x06, 0x2c,
-    0x08, 0x5a, 0x09, 0x87, 0x0a, 0xb3, 0x0b, 0xdd, 0x0c, 0x07, 0x0e, 0x2f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x56, 0x00,
-    0x7c, 0x01, 0xa0, 0x02, 0xc4, 0x03, 0xe6, 0x04, 0x07, 0x06, 0x27, 0x07, 0x46, 0x08, 0x64, 0x09, 0x81, 0x0a, 0x9c,
-    0x0b, 0xb7, 0x0c, 0xd0, 0x0d, 0xe8, 0x0e, 0x00, 0x10, 0x00, 0x00, 0x2a, 0xfd, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
-    0x52, 0x00, 0x00, 0x00, 0x04, 0x00, 0x06, 0x00, 0x08, 0x00, 0x08, 0x00, 0x0a, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x10,
-    0x00, 0x12, 0x00, 0x16, 0x00, 0x18, 0x00, 0x1a, 0x00, 0x1e, 0x00, 0x20, 0x00, 0x24, 0x00, 0x26, 0x00, 0x2a, 0x00,
-    0x2e, 0x00, 0x32, 0x00, 0x36, 0x00, 0x3a, 0x00, 0x40, 0x00, 0x44, 0x00, 0x4a, 0x00, 0x4e, 0x00, 0x54, 0x00, 0x5a,
-    0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9a, 0x00, 0xa6, 0x00,
-    0xb0, 0x00, 0xbc, 0x00, 0xc8, 0x00, 0xd4, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x8a, 0xfd, 0xff, 0xff, 0x04, 0x00, 0x00,
-    0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x14, 0x00, 0x18, 0x00,
-    0x1c, 0x00, 0x20, 0x00, 0x24, 0x00, 0x28, 0x00, 0x2c, 0x00, 0x30, 0x00, 0x34, 0x00, 0x38, 0x00, 0x3c, 0x00, 0x44,
-    0x00, 0x4c, 0x00, 0x50, 0x00, 0x58, 0x00, 0x60, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00,
-    0x90, 0x00, 0x98, 0x00, 0xa0, 0x00, 0xa8, 0x00, 0xb0, 0x00, 0xb8, 0x00, 0xc4, 0x00, 0xd0, 0x00, 0xdc, 0x00, 0xe8,
-    0x00, 0xf4, 0x00, 0x00, 0x01, 0x0c, 0x01, 0x1c, 0x01, 0x2c, 0x01, 0x00, 0x00, 0xea, 0xfd, 0xff, 0xff, 0x04, 0x00,
-    0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04,
-    0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00,
-    0x08, 0x00, 0x04, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08,
-    0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
-    0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x4a, 0xfe, 0xff, 0xff, 0x04,
-    0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x7c, 0x7f, 0x79, 0x7f, 0x76, 0x7f, 0xfa, 0xff, 0x00, 0x00, 0x00, 0x00,
-    0x70, 0x7f, 0xf4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x64, 0x7f, 0xe9, 0xff, 0xfe, 0xff, 0x00, 0x00, 0x4b, 0x7f, 0xd0,
-    0xff, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x7f, 0xa0, 0xff, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x7e, 0x42, 0xff, 0x00, 0x00,
-    0x00, 0x00, 0xfd, 0x7d, 0x86, 0xfe, 0x04, 0x00, 0x00, 0x00, 0x87, 0x7c, 0x1d, 0xfd, 0x12, 0x00, 0x00, 0x00, 0xb6,
-    0x79, 0x7f, 0xfa, 0x3e, 0x00, 0x00, 0x00, 0x73, 0x74, 0xf9, 0xf5, 0xca, 0x00, 0x00, 0x00, 0x36, 0x6b, 0x33, 0xef,
-    0x32, 0x02, 0x00, 0x00, 0x9b, 0x5c, 0x87, 0xe7, 0xce, 0x04, 0x00, 0x00, 0xf0, 0x48, 0xde, 0xe2, 0xa0, 0x07, 0x00,
-    0x00, 0x6e, 0x33, 0x8a, 0xe4, 0xa4, 0x08, 0x00, 0x00, 0x9c, 0x20, 0x22, 0xeb, 0x4c, 0x07, 0x00, 0x00, 0x0a, 0x13,
-    0x7d, 0xf2, 0x02, 0x05, 0x00, 0x00, 0x89, 0x0a, 0x17, 0xf8, 0x06, 0x03, 0x00, 0x00, 0xa6, 0x05, 0xa0, 0xfb, 0xb4,
-    0x01, 0x00, 0x00, 0xfa, 0x02, 0xac, 0xfd, 0xe8, 0x00, 0x00, 0x00, 0x8e, 0x01, 0xc7, 0xfe, 0x7a, 0x00, 0x00, 0x00,
-    0xcf, 0x00, 0x5c, 0xff, 0x40, 0x00, 0x00, 0x00, 0x6b, 0x00, 0xab, 0xff, 0x22, 0x00, 0x00, 0x00, 0x38, 0x00, 0xd3,
-    0xff, 0x12, 0x00, 0x00, 0x00, 0x1d, 0x00, 0xea, 0xff, 0x08, 0x00, 0x00, 0x00, 0x0f, 0x00, 0xf3, 0xff, 0x06, 0x00,
-    0x00, 0x00, 0x08, 0x00, 0xf8, 0xff, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02,
-    0x00, 0xfd, 0xff, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xfd, 0xff,
-    0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00,
-    0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x62, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00,
-    0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x72, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
-    0x00, 0x00, 0x00, 0x82, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00,
-    0x92, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0xff, 0xff, 0xff, 0x04, 0x00,
-    0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x08, 0x00,
-    0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-    0x00, 0x02, 0x00, 0x04, 0x00, 0x05, 0x00, 0x07, 0x00, 0x0a, 0x00, 0x0d, 0x00, 0x10, 0x00, 0x13, 0x00, 0x17, 0x00,
-    0x1b, 0x00, 0x20, 0x00, 0x25, 0x00, 0x2a, 0x00, 0x30, 0x00, 0x35, 0x00, 0x3c, 0x00, 0x42, 0x00, 0x49, 0x00, 0x51,
-    0x00, 0x58, 0x00, 0x60, 0x00, 0x68, 0x00, 0x71, 0x00, 0x7a, 0x00, 0x83, 0x00, 0x8d, 0x00, 0x97, 0x00, 0xa1, 0x00,
-    0xac, 0x00, 0xb7, 0x00, 0xc2, 0x00, 0xcd, 0x00, 0xd9, 0x00, 0xe5, 0x00, 0xf2, 0x00, 0xff, 0x00, 0x0c, 0x01, 0x19,
-    0x01, 0x27, 0x01, 0x35, 0x01, 0x43, 0x01, 0x52, 0x01, 0x61, 0x01, 0x70, 0x01, 0x7f, 0x01, 0x8f, 0x01, 0x9f, 0x01,
-    0xaf, 0x01, 0xc0, 0x01, 0xd1, 0x01, 0xe2, 0x01, 0xf3, 0x01, 0x05, 0x02, 0x17, 0x02, 0x29, 0x02, 0x3c, 0x02, 0x4e,
-    0x02, 0x61, 0x02, 0x75, 0x02, 0x88, 0x02, 0x9c, 0x02, 0xb0, 0x02, 0xc4, 0x02, 0xd8, 0x02, 0xed, 0x02, 0x02, 0x03,
-    0x17, 0x03, 0x2c, 0x03, 0x41, 0x03, 0x57, 0x03, 0x6d, 0x03, 0x83, 0x03, 0x99, 0x03, 0xb0, 0x03, 0xc7, 0x03, 0xdd,
-    0x03, 0xf4, 0x03, 0x0c, 0x04, 0x23, 0x04, 0x3b, 0x04, 0x52, 0x04, 0x6a, 0x04, 0x82, 0x04, 0x9a, 0x04, 0xb3, 0x04,
-    0xcb, 0x04, 0xe4, 0x04, 0xfd, 0x04, 0x16, 0x05, 0x2f, 0x05, 0x48, 0x05, 0x61, 0x05, 0x7a, 0x05, 0x94, 0x05, 0xad,
-    0x05, 0xc7, 0x05, 0xe1, 0x05, 0xfb, 0x05, 0x15, 0x06, 0x2f, 0x06, 0x49, 0x06, 0x63, 0x06, 0x7e, 0x06, 0x98, 0x06,
-    0xb2, 0x06, 0xcd, 0x06, 0xe7, 0x06, 0x02, 0x07, 0x1d, 0x07, 0x37, 0x07, 0x52, 0x07, 0x6d, 0x07, 0x87, 0x07, 0xa2,
-    0x07, 0xbd, 0x07, 0xd8, 0x07, 0xf3, 0x07, 0x0d, 0x08, 0x28, 0x08, 0x43, 0x08, 0x5e, 0x08, 0x79, 0x08, 0x93, 0x08,
-    0xae, 0x08, 0xc9, 0x08, 0xe3, 0x08, 0xfe, 0x08, 0x19, 0x09, 0x33, 0x09, 0x4e, 0x09, 0x68, 0x09, 0x82, 0x09, 0x9d,
-    0x09, 0xb7, 0x09, 0xd1, 0x09, 0xeb, 0x09, 0x05, 0x0a, 0x1f, 0x0a, 0x39, 0x0a, 0x53, 0x0a, 0x6c, 0x0a, 0x86, 0x0a,
-    0x9f, 0x0a, 0xb8, 0x0a, 0xd1, 0x0a, 0xea, 0x0a, 0x03, 0x0b, 0x1c, 0x0b, 0x35, 0x0b, 0x4d, 0x0b, 0x66, 0x0b, 0x7e,
-    0x0b, 0x96, 0x0b, 0xae, 0x0b, 0xc5, 0x0b, 0xdd, 0x0b, 0xf4, 0x0b, 0x0c, 0x0c, 0x23, 0x0c, 0x39, 0x0c, 0x50, 0x0c,
-    0x67, 0x0c, 0x7d, 0x0c, 0x93, 0x0c, 0xa9, 0x0c, 0xbf, 0x0c, 0xd4, 0x0c, 0xe9, 0x0c, 0xfe, 0x0c, 0x13, 0x0d, 0x28,
-    0x0d, 0x3c, 0x0d, 0x50, 0x0d, 0x64, 0x0d, 0x78, 0x0d, 0x8b, 0x0d, 0x9f, 0x0d, 0xb2, 0x0d, 0xc4, 0x0d, 0xd7, 0x0d,
-    0xe9, 0x0d, 0xfb, 0x0d, 0x0d, 0x0e, 0x1e, 0x0e, 0x2f, 0x0e, 0x40, 0x0e, 0x51, 0x0e, 0x61, 0x0e, 0x71, 0x0e, 0x81,
-    0x0e, 0x90, 0x0e, 0x9f, 0x0e, 0xae, 0x0e, 0xbd, 0x0e, 0xcb, 0x0e, 0xd9, 0x0e, 0xe7, 0x0e, 0xf4, 0x0e, 0x01, 0x0f,
-    0x0e, 0x0f, 0x1b, 0x0f, 0x27, 0x0f, 0x33, 0x0f, 0x3e, 0x0f, 0x49, 0x0f, 0x54, 0x0f, 0x5f, 0x0f, 0x69, 0x0f, 0x73,
-    0x0f, 0x7d, 0x0f, 0x86, 0x0f, 0x8f, 0x0f, 0x98, 0x0f, 0xa0, 0x0f, 0xa8, 0x0f, 0xaf, 0x0f, 0xb7, 0x0f, 0xbe, 0x0f,
-    0xc4, 0x0f, 0xcb, 0x0f, 0xd0, 0x0f, 0xd6, 0x0f, 0xdb, 0x0f, 0xe0, 0x0f, 0xe5, 0x0f, 0xe9, 0x0f, 0xed, 0x0f, 0xf0,
-    0x0f, 0xf3, 0x0f, 0xf6, 0x0f, 0xf9, 0x0f, 0xfb, 0x0f, 0xfc, 0x0f, 0xfe, 0x0f, 0xff, 0x0f, 0x00, 0x10, 0x00, 0x10,
-    0x00, 0x10, 0x00, 0x10, 0xff, 0x0f, 0xfe, 0x0f, 0xfc, 0x0f, 0xfb, 0x0f, 0xf9, 0x0f, 0xf6, 0x0f, 0xf3, 0x0f, 0xf0,
-    0x0f, 0xed, 0x0f, 0xe9, 0x0f, 0xe5, 0x0f, 0xe0, 0x0f, 0xdb, 0x0f, 0xd6, 0x0f, 0xd0, 0x0f, 0xcb, 0x0f, 0xc4, 0x0f,
-    0xbe, 0x0f, 0xb7, 0x0f, 0xaf, 0x0f, 0xa8, 0x0f, 0xa0, 0x0f, 0x98, 0x0f, 0x8f, 0x0f, 0x86, 0x0f, 0x7d, 0x0f, 0x73,
-    0x0f, 0x69, 0x0f, 0x5f, 0x0f, 0x54, 0x0f, 0x49, 0x0f, 0x3e, 0x0f, 0x33, 0x0f, 0x27, 0x0f, 0x1b, 0x0f, 0x0e, 0x0f,
-    0x01, 0x0f, 0xf4, 0x0e, 0xe7, 0x0e, 0xd9, 0x0e, 0xcb, 0x0e, 0xbd, 0x0e, 0xae, 0x0e, 0x9f, 0x0e, 0x90, 0x0e, 0x81,
-    0x0e, 0x71, 0x0e, 0x61, 0x0e, 0x51, 0x0e, 0x40, 0x0e, 0x2f, 0x0e, 0x1e, 0x0e, 0x0d, 0x0e, 0xfb, 0x0d, 0xe9, 0x0d,
-    0xd7, 0x0d, 0xc4, 0x0d, 0xb2, 0x0d, 0x9f, 0x0d, 0x8b, 0x0d, 0x78, 0x0d, 0x64, 0x0d, 0x50, 0x0d, 0x3c, 0x0d, 0x28,
-    0x0d, 0x13, 0x0d, 0xfe, 0x0c, 0xe9, 0x0c, 0xd4, 0x0c, 0xbf, 0x0c, 0xa9, 0x0c, 0x93, 0x0c, 0x7d, 0x0c, 0x67, 0x0c,
-    0x50, 0x0c, 0x39, 0x0c, 0x23, 0x0c, 0x0c, 0x0c, 0xf4, 0x0b, 0xdd, 0x0b, 0xc5, 0x0b, 0xae, 0x0b, 0x96, 0x0b, 0x7e,
-    0x0b, 0x66, 0x0b, 0x4d, 0x0b, 0x35, 0x0b, 0x1c, 0x0b, 0x03, 0x0b, 0xea, 0x0a, 0xd1, 0x0a, 0xb8, 0x0a, 0x9f, 0x0a,
-    0x86, 0x0a, 0x6c, 0x0a, 0x53, 0x0a, 0x39, 0x0a, 0x1f, 0x0a, 0x05, 0x0a, 0xeb, 0x09, 0xd1, 0x09, 0xb7, 0x09, 0x9d,
-    0x09, 0x82, 0x09, 0x68, 0x09, 0x4e, 0x09, 0x33, 0x09, 0x19, 0x09, 0xfe, 0x08, 0xe3, 0x08, 0xc9, 0x08, 0xae, 0x08,
-    0x93, 0x08, 0x79, 0x08, 0x5e, 0x08, 0x43, 0x08, 0x28, 0x08, 0x0d, 0x08, 0xf3, 0x07, 0xd8, 0x07, 0xbd, 0x07, 0xa2,
-    0x07, 0x87, 0x07, 0x6d, 0x07, 0x52, 0x07, 0x37, 0x07, 0x1d, 0x07, 0x02, 0x07, 0xe7, 0x06, 0xcd, 0x06, 0xb2, 0x06,
-    0x98, 0x06, 0x7e, 0x06, 0x63, 0x06, 0x49, 0x06, 0x2f, 0x06, 0x15, 0x06, 0xfb, 0x05, 0xe1, 0x05, 0xc7, 0x05, 0xad,
-    0x05, 0x94, 0x05, 0x7a, 0x05, 0x61, 0x05, 0x48, 0x05, 0x2f, 0x05, 0x16, 0x05, 0xfd, 0x04, 0xe4, 0x04, 0xcb, 0x04,
-    0xb3, 0x04, 0x9a, 0x04, 0x82, 0x04, 0x6a, 0x04, 0x52, 0x04, 0x3b, 0x04, 0x23, 0x04, 0x0c, 0x04, 0xf4, 0x03, 0xdd,
-    0x03, 0xc7, 0x03, 0xb0, 0x03, 0x99, 0x03, 0x83, 0x03, 0x6d, 0x03, 0x57, 0x03, 0x41, 0x03, 0x2c, 0x03, 0x17, 0x03,
-    0x02, 0x03, 0xed, 0x02, 0xd8, 0x02, 0xc4, 0x02, 0xb0, 0x02, 0x9c, 0x02, 0x88, 0x02, 0x75, 0x02, 0x61, 0x02, 0x4e,
-    0x02, 0x3c, 0x02, 0x29, 0x02, 0x17, 0x02, 0x05, 0x02, 0xf3, 0x01, 0xe2, 0x01, 0xd1, 0x01, 0xc0, 0x01, 0xaf, 0x01,
-    0x9f, 0x01, 0x8f, 0x01, 0x7f, 0x01, 0x70, 0x01, 0x61, 0x01, 0x52, 0x01, 0x43, 0x01, 0x35, 0x01, 0x27, 0x01, 0x19,
-    0x01, 0x0c, 0x01, 0xff, 0x00, 0xf2, 0x00, 0xe5, 0x00, 0xd9, 0x00, 0xcd, 0x00, 0xc2, 0x00, 0xb7, 0x00, 0xac, 0x00,
-    0xa1, 0x00, 0x97, 0x00, 0x8d, 0x00, 0x83, 0x00, 0x7a, 0x00, 0x71, 0x00, 0x68, 0x00, 0x60, 0x00, 0x58, 0x00, 0x51,
-    0x00, 0x49, 0x00, 0x42, 0x00, 0x3c, 0x00, 0x35, 0x00, 0x30, 0x00, 0x2a, 0x00, 0x25, 0x00, 0x20, 0x00, 0x1b, 0x00,
-    0x17, 0x00, 0x13, 0x00, 0x10, 0x00, 0x0d, 0x00, 0x0a, 0x00, 0x07, 0x00, 0x05, 0x00, 0x04, 0x00, 0x02, 0x00, 0x01,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0xee, 0xff, 0xff, 0x38, 0xee, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x4d, 0x4c,
-    0x49, 0x52, 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x2e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00,
-    0x0e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xf4, 0x05, 0x00, 0x00, 0xf8, 0x05, 0x00,
-    0x00, 0xfc, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00,
-    0x00, 0x00, 0xa0, 0x05, 0x00, 0x00, 0x68, 0x05, 0x00, 0x00, 0x24, 0x05, 0x00, 0x00, 0xc8, 0x04, 0x00, 0x00, 0x70,
-    0x04, 0x00, 0x00, 0x4c, 0x04, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0xc8, 0x03, 0x00, 0x00, 0xa4, 0x03, 0x00, 0x00,
-    0x4c, 0x03, 0x00, 0x00, 0x14, 0x03, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0xc8, 0x01, 0x00, 0x00, 0x6c, 0x01, 0x00,
-    0x00, 0x48, 0x01, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x78, 0x00,
-    0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xf6, 0xfa, 0xff, 0xff, 0x0c,
-    0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
-    0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x16, 0xfb, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
-    0x00, 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x28, 0x00,
-    0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x3a, 0xfb, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10,
-    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00,
-    0x0e, 0x00, 0x00, 0x00, 0xa6, 0xfc, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x10, 0x00, 0x00,
-    0x00, 0x14, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x68, 0xef, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x27, 0x00,
-    0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xd6, 0xfc, 0xff, 0xff, 0x14,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
-    0x98, 0xef, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00,
-    0x00, 0x12, 0x00, 0x00, 0x00, 0x06, 0xfd, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x10, 0x00,
-    0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xc8, 0xef, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x25,
-    0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x36, 0xfd, 0xff, 0xff,
-    0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00,
-    0x00, 0xf8, 0xef, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00,
-    0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x1e, 0xfc, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x05,
-    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
-    0x84, 0xfc, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,
-    0x00, 0x30, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x69,
-    0x6f, 0x6e, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x00, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x63, 0x61, 0x6c,
-    0x65, 0x00, 0x02, 0x24, 0x0f, 0x02, 0x01, 0x02, 0x03, 0x40, 0x04, 0x04, 0x04, 0x24, 0x01, 0x01, 0x00, 0x00, 0x00,
-    0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0xdc, 0xfc, 0xff, 0xff, 0x10, 0x00, 0x00,
-    0x00, 0x24, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x73, 0x6e,
-    0x72, 0x5f, 0x73, 0x68, 0x69, 0x66, 0x74, 0x00, 0x01, 0x0b, 0x01, 0x01, 0x01, 0x06, 0x04, 0x02, 0x24, 0x01, 0x01,
-    0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
-    0x08, 0x00, 0x00, 0x00, 0x20, 0xfd, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00,
-    0x00, 0x0a, 0x00, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x5f,
-    0x6f, 0x6e, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x5f, 0x73, 0x6d, 0x6f, 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67,
-    0x00, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x6d, 0x6f, 0x6f, 0x74, 0x68, 0x69, 0x6e,
-    0x67, 0x00, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x00, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e,
-    0x61, 0x6c, 0x5f, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x00, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x68,
-    0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x00, 0x6f, 0x6e, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x5f, 0x73, 0x6d,
-    0x6f, 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x00, 0x73, 0x6d, 0x6f, 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x00, 0x73,
-    0x6d, 0x6f, 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x00, 0x73, 0x70, 0x65, 0x63, 0x74,
-    0x72, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x69, 0x74,
-    0x73, 0x00, 0x09, 0xa5, 0x88, 0x75, 0x6d, 0x59, 0x4d, 0x3a, 0x31, 0x23, 0x09, 0x00, 0x01, 0x00, 0x09, 0x00, 0x29,
-    0x3c, 0xd7, 0x03, 0x00, 0x00, 0x33, 0x03, 0x28, 0x00, 0x67, 0x3e, 0x99, 0x01, 0x0a, 0x00, 0x0e, 0x00, 0x05, 0x05,
-    0x69, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x1b, 0x25, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00,
-    0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x20, 0xfe, 0xff, 0xff, 0x10, 0x00,
-    0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-    0x1d, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x54, 0xfe, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00,
-    0x00, 0x2c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x68,
-    0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x00, 0x01, 0x0e, 0x01, 0x01, 0x01, 0x28, 0x04, 0x02, 0x24, 0x01, 0x00, 0x01,
-    0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
-    0x0c, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x62, 0xfe, 0xff,
-    0xff, 0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00,
-    0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xca, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x0a, 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8c, 0xf2, 0xff, 0xff,
-    0x01, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00,
-    0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x0b, 0x00,
-    0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x00, 0x00, 0x00, 0x14,
-    0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xd0, 0xf2, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
-    0x04, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
-    0x00, 0xfe, 0xfe, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00,
-    0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x64, 0xff, 0xff, 0xff, 0x10,
-    0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00,
-    0x65, 0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x00, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x69, 0x6e, 0x64,
-    0x65, 0x78, 0x00, 0x02, 0x17, 0x0e, 0x00, 0x03, 0x00, 0x01, 0x00, 0x02, 0x00, 0xf1, 0x00, 0x05, 0x00, 0x05, 0x05,
-    0x06, 0x25, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17,
-    0x00, 0x00, 0x00, 0xb8, 0xff, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
-    0x03, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x54, 0x00, 0x66, 0x66, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74,
-    0x68, 0x00, 0x02, 0x0e, 0x0d, 0x02, 0x00, 0x01, 0x00, 0x02, 0x00, 0x07, 0x00, 0x00, 0x02, 0x05, 0x05, 0x06, 0x25,
-    0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x10,
-    0x00, 0x14, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
-    0x10, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x16, 0x00,
-    0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x08,
-    0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-    0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00,
-    0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00,
-    0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x73,
-    0x68, 0x69, 0x66, 0x74, 0x00, 0x01, 0x07, 0x01, 0x01, 0x01, 0x0c, 0x04, 0x02, 0x24, 0x01, 0x01, 0x00, 0x00, 0x00,
-    0x13, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
-    0x00, 0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0xc4, 0x0a,
-    0x00, 0x00, 0x74, 0x0a, 0x00, 0x00, 0x3c, 0x0a, 0x00, 0x00, 0x04, 0x0a, 0x00, 0x00, 0xd0, 0x09, 0x00, 0x00, 0x88,
-    0x09, 0x00, 0x00, 0x40, 0x09, 0x00, 0x00, 0xfc, 0x08, 0x00, 0x00, 0xb8, 0x08, 0x00, 0x00, 0x6c, 0x08, 0x00, 0x00,
-    0x20, 0x08, 0x00, 0x00, 0xd4, 0x07, 0x00, 0x00, 0x88, 0x07, 0x00, 0x00, 0x3c, 0x07, 0x00, 0x00, 0xf8, 0x06, 0x00,
-    0x00, 0xb8, 0x06, 0x00, 0x00, 0x84, 0x06, 0x00, 0x00, 0x50, 0x06, 0x00, 0x00, 0x1c, 0x06, 0x00, 0x00, 0xd8, 0x05,
-    0x00, 0x00, 0xa0, 0x05, 0x00, 0x00, 0x58, 0x05, 0x00, 0x00, 0x14, 0x05, 0x00, 0x00, 0xd8, 0x04, 0x00, 0x00, 0x98,
-    0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 0xb0, 0x03, 0x00, 0x00,
-    0x6c, 0x03, 0x00, 0x00, 0x1c, 0x03, 0x00, 0x00, 0xc4, 0x02, 0x00, 0x00, 0x68, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00,
-    0x00, 0xe4, 0x01, 0x00, 0x00, 0xac, 0x01, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x08, 0x01,
-    0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xfe,
-    0xf5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x09, 0x20, 0x00, 0x00, 0x00, 0x44, 0xf5, 0xff, 0xff, 0x11, 0x00, 0x00, 0x00, 0x50, 0x61, 0x72,
-    0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x3a, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00,
-    0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3e, 0xf6, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14,
-    0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1c, 0x00, 0x00, 0x00, 0x84, 0xf5, 0xff, 0xff,
-    0x0d, 0x00, 0x00, 0x00, 0x63, 0x6c, 0x69, 0x70, 0x5f, 0x62, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x00, 0x00,
-    0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x7a, 0xf6, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00,
-    0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x24, 0x00, 0x00, 0x00, 0xc0,
-    0xf5, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x63, 0x6c, 0x69, 0x70, 0x5f, 0x62, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75,
-    0x65, 0x2f, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00,
-    0x00, 0xbe, 0xf6, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x28, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x00, 0x04, 0xf6, 0xff, 0xff, 0x05, 0x00, 0x00, 0x00, 0x61,
-    0x64, 0x64, 0x5f, 0x31, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xf2, 0xf6, 0xff, 0xff,
-    0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x02, 0x18, 0x00, 0x00, 0x00, 0x38, 0xf6, 0xff, 0xff, 0x0b, 0x00, 0x00, 0x00, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61,
-    0x74, 0x65, 0x44, 0x69, 0x76, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0xf7, 0xff, 0xff, 0x00,
-    0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
-    0x10, 0x00, 0x00, 0x00, 0x70, 0xf6, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x61, 0x64, 0x64, 0x00, 0x01, 0x00, 0x00,
-    0x00, 0x28, 0x00, 0x00, 0x00, 0x5a, 0xf7, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00,
-    0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0xa0, 0xf6, 0xff, 0xff, 0x03,
-    0x00, 0x00, 0x00, 0x6d, 0x75, 0x6c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x8a, 0xf7, 0xff, 0xff,
-    0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x02, 0x14, 0x00, 0x00, 0x00, 0xd0, 0xf6, 0xff, 0xff, 0x06, 0x00, 0x00, 0x00, 0x43, 0x61, 0x73, 0x74, 0x5f, 0x32,
-    0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xbe, 0xf7, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14,
-    0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x24, 0x00, 0x00, 0x00,
-    0x04, 0xf7, 0xff, 0xff, 0x16, 0x00, 0x00, 0x00, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x74,
-    0x65, 0x72, 0x5f, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x6c, 0x6f, 0x67, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00,
-    0x00, 0x00, 0x02, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x22,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x18, 0x00, 0x00, 0x00, 0x48, 0xf7, 0xff, 0xff, 0x0b, 0x00, 0x00, 0x00,
-    0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x63, 0x61, 0x6e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00,
-    0x00, 0x3a, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x21, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x38, 0x00, 0x00, 0x00, 0x80, 0xf7, 0xff, 0xff, 0x28, 0x00, 0x00, 0x00, 0x73,
-    0x69, 0x67, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x73,
-    0x70, 0x65, 0x63, 0x74, 0x72, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
-    0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x92, 0xf8, 0xff, 0xff, 0x00, 0x00,
-    0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x34,
-    0x00, 0x00, 0x00, 0xd8, 0xf7, 0xff, 0xff, 0x27, 0x00, 0x00, 0x00, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x5f, 0x66,
-    0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x74, 0x72, 0x61, 0x6c,
-    0x5f, 0x73, 0x75, 0x62, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00,
-    0x00, 0x00, 0xe6, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1f,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x2c, 0x00, 0x00, 0x00, 0x2c, 0xf8, 0xff, 0xff, 0x1e, 0x00, 0x00, 0x00,
-    0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x6e, 0x6b, 0x5f,
-    0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00,
-    0x00, 0x00, 0x32, 0xf9, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1e,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x20, 0x00, 0x00, 0x00, 0x78, 0xf8, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00,
-    0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x6e, 0x6b, 0x00,
-    0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x72, 0xf9, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00,
-    0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x14, 0x00, 0x00, 0x00, 0xb8,
-    0xf8, 0xff, 0xff, 0x06, 0x00, 0x00, 0x00, 0x43, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-    0x01, 0x01, 0x00, 0x00, 0xa6, 0xf9, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00,
-    0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x00, 0xec, 0xf8, 0xff, 0xff, 0x06, 0x00,
-    0x00, 0x00, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0xda,
-    0xf9, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x02, 0x1c, 0x00, 0x00, 0x00, 0x20, 0xf9, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x00, 0x73, 0x74, 0x72,
-    0x69, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xec, 0x00,
-    0x00, 0x00, 0x16, 0xfa, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1a,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x00, 0x5c, 0xf9, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
-    0x43, 0x61, 0x73, 0x74, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x4a, 0xfa, 0xff,
-    0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x0f, 0x1c, 0x00, 0x00, 0x00, 0x90, 0xf9, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x00, 0x73, 0x69, 0x67, 0x6e, 0x61,
-    0x6c, 0x5f, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
-    0x86, 0xfa, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x00, 0x00, 0x00, 0xcc, 0xf9, 0xff, 0xff, 0x0b, 0x00, 0x00, 0x00, 0x73, 0x69,
-    0x67, 0x6e, 0x61, 0x6c, 0x5f, 0x72, 0x66, 0x66, 0x74, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0xbe,
-    0xfa, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x02, 0x24, 0x00, 0x00, 0x00, 0x04, 0xfa, 0xff, 0xff, 0x16, 0x00, 0x00, 0x00, 0x73, 0x69, 0x67,
-    0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x66, 0x74, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x31,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfa, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14,
-    0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x24, 0x00, 0x00, 0x00, 0x44, 0xfa, 0xff, 0xff,
-    0x15, 0x00, 0x00, 0x00, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x66, 0x74, 0x5f, 0x61, 0x75, 0x74, 0x6f,
-    0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x42, 0xfb,
-    0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x07, 0x14, 0x00, 0x00, 0x00, 0x88, 0xfa, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x52, 0x65, 0x73, 0x68,
-    0x61, 0x70, 0x65, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x76, 0xfb, 0xff, 0xff, 0x00, 0x00, 0x00,
-    0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1c, 0x00,
-    0x00, 0x00, 0xbc, 0xfa, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x00, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x5f, 0x77, 0x69,
-    0x6e, 0x64, 0x6f, 0x77, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00,
-    0xb6, 0xfb, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x00, 0xfc, 0xfa, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x43, 0x6f,
-    0x6e, 0x73, 0x74, 0x5f, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xfb, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14,
-    0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x00,
-    0x2c, 0xfb, 0xff, 0xff, 0x06, 0x00, 0x00, 0x00, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x16, 0xfc, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x11, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x00, 0x5c, 0xfb, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x43,
-    0x6f, 0x6e, 0x73, 0x74, 0x5f, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0xfc, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01,
-    0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1c, 0x00, 0x00,
-    0x00, 0x8c, 0xfb, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x00, 0x52, 0x65, 0x73, 0x68, 0x61, 0x70, 0x65, 0x2f, 0x73, 0x68,
-    0x61, 0x70, 0x65, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x82, 0xfc, 0xff, 0xff, 0x00,
-    0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
-    0x24, 0x00, 0x00, 0x00, 0xc8, 0xfb, 0xff, 0xff, 0x17, 0x00, 0x00, 0x00, 0x63, 0x6c, 0x69, 0x70, 0x5f, 0x62, 0x79,
-    0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2f, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x2f, 0x79, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0xc2, 0xfc, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0e,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x28, 0x00, 0x00, 0x00, 0x08, 0xfc, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00,
-    0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x6e, 0x6b, 0x2f,
-    0x43, 0x6f, 0x6e, 0x73, 0x74, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x01, 0x00, 0x00, 0x0a, 0xfd,
-    0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x07, 0x28, 0x00, 0x00, 0x00, 0x50, 0xfc, 0xff, 0xff, 0x1a, 0x00, 0x00, 0x00, 0x73, 0x69, 0x67, 0x6e,
-    0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x6e, 0x6b, 0x2f, 0x43, 0x6f, 0x6e, 0x73,
-    0x74, 0x5f, 0x31, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x01, 0x00, 0x00, 0x52, 0xfd, 0xff, 0xff, 0x00, 0x00,
-    0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x28,
-    0x00, 0x00, 0x00, 0x98, 0xfc, 0xff, 0xff, 0x1a, 0x00, 0x00, 0x00, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x5f, 0x66,
-    0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x61, 0x6e, 0x6b, 0x2f, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x5f, 0x32, 0x00,
-    0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x9a, 0xfd, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00,
-    0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x28, 0x00, 0x00, 0x00, 0xe0,
-    0xfc, 0xff, 0xff, 0x1a, 0x00, 0x00, 0x00, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65,
-    0x72, 0x5f, 0x62, 0x61, 0x6e, 0x6b, 0x2f, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x5f, 0x33, 0x00, 0x00, 0x01, 0x00, 0x00,
-    0x00, 0x29, 0x00, 0x00, 0x00, 0xe2, 0xfd, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00,
-    0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x28, 0x00, 0x00, 0x00, 0x28, 0xfd, 0xff, 0xff, 0x1a,
-    0x00, 0x00, 0x00, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x62, 0x61,
-    0x6e, 0x6b, 0x2f, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x5f, 0x34, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00,
-    0x00, 0x2a, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x09, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x20, 0x00, 0x00, 0x00, 0x70, 0xfd, 0xff, 0xff, 0x11, 0x00, 0x00, 0x00, 0x73,
-    0x69, 0x67, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x63, 0x61, 0x6e, 0x2f, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x00, 0x00, 0x00,
-    0x01, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x6a, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00,
-    0x00, 0x14, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0xb0, 0xfd,
-    0xff, 0xff, 0x13, 0x00, 0x00, 0x00, 0x73, 0x74, 0x72, 0x69, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x6c, 0x69, 0x63, 0x65,
-    0x2f, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xaa, 0xfe, 0xff, 0xff,
-    0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x02, 0x24, 0x00, 0x00, 0x00, 0xf0, 0xfd, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x73, 0x74, 0x72, 0x69, 0x64, 0x65,
-    0x64, 0x5f, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x31, 0x00, 0x00, 0x00, 0x01,
-    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xee, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00,
-    0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x24, 0x00, 0x00, 0x00, 0x34, 0xfe, 0xff,
-    0xff, 0x15, 0x00, 0x00, 0x00, 0x73, 0x74, 0x72, 0x69, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x2f,
-    0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32,
-    0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x00, 0x78, 0xfe, 0xff, 0xff, 0x06, 0x00, 0x00, 0x00, 0x43, 0x61, 0x73,
-    0x74, 0x5f, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00,
-    0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x00, 0xa8,
-    0xfe, 0xff, 0xff, 0x05, 0x00, 0x00, 0x00, 0x7a, 0x65, 0x72, 0x6f, 0x73, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-    0x05, 0x00, 0x00, 0x00, 0x96, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00,
-    0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x00, 0xdc, 0xfe, 0xff, 0xff, 0x07, 0x00,
-    0x00, 0x00, 0x7a, 0x65, 0x72, 0x6f, 0x73, 0x5f, 0x31, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xca,
-    0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x07, 0x14, 0x00, 0x00, 0x00, 0x10, 0xff, 0xff, 0xff, 0x05, 0x00, 0x00, 0x00, 0x43, 0x6f, 0x6e,
-    0x73, 0x74, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x1c, 0x00,
-    0x18, 0x00, 0x17, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x16,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x07, 0x2c, 0x00, 0x00, 0x00, 0x5c, 0xff, 0xff, 0xff, 0x1d, 0x00, 0x00, 0x00, 0x73, 0x65, 0x72,
-    0x76, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x5f,
-    0x66, 0x72, 0x61, 0x6d, 0x65, 0x3a, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe0,
-    0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x1c, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xc8, 0x01, 0x00, 0x00,
-    0xa4, 0x01, 0x00, 0x00, 0x7c, 0x01, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x4c, 0x01, 0x00, 0x00, 0x3c, 0x01, 0x00,
-    0x00, 0x10, 0x01, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x50, 0x00,
-    0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04,
-    0x00, 0x00, 0x00, 0x50, 0xfe, 0xff, 0xff, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x5c, 0xfe, 0xff, 0xff,
-    0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x68, 0xfe, 0xff, 0xff, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x2a, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x7c, 0xfe, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x12, 0x70, 0xfe, 0xff, 0xff, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x13,
-    0x00, 0x00, 0x00, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6b,
-    0x4c, 0x6f, 0x67, 0x00, 0x98, 0xfe, 0xff, 0xff, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x20, 0x0a, 0x00, 0x00, 0x00, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x50, 0x43, 0x41, 0x4e, 0x00, 0x00, 0xb8, 0xfe,
-    0xff, 0xff, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x23, 0x00, 0x00, 0x00, 0x53,
-    0x69, 0x67, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6b, 0x53, 0x70, 0x65, 0x63,
-    0x74, 0x72, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0xf0, 0xfe, 0xff,
-    0xff, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1a, 0x00, 0x00, 0x00, 0x53, 0x69,
-    0x67, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x61, 0x6e, 0x6b, 0x53, 0x71, 0x75, 0x61, 0x72,
-    0x65, 0x52, 0x6f, 0x6f, 0x74, 0x00, 0x00, 0x20, 0xff, 0xff, 0xff, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x20, 0x10, 0x00, 0x00, 0x00, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65,
-    0x72, 0x42, 0x61, 0x6e, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x60, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x02, 0x6c, 0xff, 0xff, 0xff, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x0c, 0x00, 0x10, 0x00, 0x0f,
-    0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x35, 0x7c, 0xff, 0xff, 0xff, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-    0x20, 0x0c, 0x00, 0x00, 0x00, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x00, 0x00,
-    0x00, 0x00, 0xa0, 0xff, 0xff, 0xff, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0a,
-    0x00, 0x00, 0x00, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x66, 0x66, 0x74, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff,
-    0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x12, 0x00, 0x00, 0x00, 0x53, 0x69, 0x67,
-    0x6e, 0x61, 0x6c, 0x46, 0x66, 0x74, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x00, 0x00, 0x0c, 0x00,
-    0x0c, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x16, 0x0c, 0x00, 0x10, 0x00, 0x0f, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
-    0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0c, 0x00, 0x00, 0x00, 0x53, 0x69, 0x67,
-    0x6e, 0x61, 0x6c, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x00, 0x00, 0x00, 0x00};
-
-}  // namespace micro_wake_word
-}  // namespace esphome
-
-#endif  // USE_ESP_IDF
diff --git a/esphome/components/micro_wake_word/micro_wake_word.cpp b/esphome/components/micro_wake_word/micro_wake_word.cpp
index 5a89708127..b58c7ec434 100644
--- a/esphome/components/micro_wake_word/micro_wake_word.cpp
+++ b/esphome/components/micro_wake_word/micro_wake_word.cpp
@@ -1,12 +1,5 @@
 #include "micro_wake_word.h"
-
-/**
- * This is a workaround until we can figure out a way to get
- * the tflite-micro idf component code available in CI
- *
- * */
-//
-#ifndef CLANG_TIDY
+#include "streaming_model.h"
 
 #ifdef USE_ESP_IDF
 
@@ -14,13 +7,13 @@
 #include "esphome/core/helpers.h"
 #include "esphome/core/log.h"
 
-#include "audio_preprocessor_int8_model_data.h"
+#include <frontend.h>
+#include <frontend_util.h>
 
 #include <tensorflow/lite/core/c/common.h>
 #include <tensorflow/lite/micro/micro_interpreter.h>
 #include <tensorflow/lite/micro/micro_mutable_op_resolver.h>
 
-#include <cinttypes>
 #include <cmath>
 
 namespace esphome {
@@ -29,9 +22,9 @@ namespace micro_wake_word {
 static const char *const TAG = "micro_wake_word";
 
 static const size_t SAMPLE_RATE_HZ = 16000;  // 16 kHz
-static const size_t BUFFER_LENGTH = 500;     // 0.5 seconds
+static const size_t BUFFER_LENGTH = 64;      // 0.064 seconds
 static const size_t BUFFER_SIZE = SAMPLE_RATE_HZ / 1000 * BUFFER_LENGTH;
-static const size_t INPUT_BUFFER_SIZE = 32 * SAMPLE_RATE_HZ / 1000;  // 32ms * 16kHz / 1000ms
+static const size_t INPUT_BUFFER_SIZE = 16 * SAMPLE_RATE_HZ / 1000;  // 16ms * 16kHz / 1000ms
 
 float MicroWakeWord::get_setup_priority() const { return setup_priority::AFTER_CONNECTION; }
 
@@ -56,58 +49,56 @@ static const LogString *micro_wake_word_state_to_string(State state) {
 
 void MicroWakeWord::dump_config() {
   ESP_LOGCONFIG(TAG, "microWakeWord:");
-  ESP_LOGCONFIG(TAG, "  Wake Word: %s", this->get_wake_word().c_str());
-  ESP_LOGCONFIG(TAG, "  Probability cutoff: %.3f", this->probability_cutoff_);
-  ESP_LOGCONFIG(TAG, "  Sliding window size: %d", this->sliding_window_average_size_);
+  ESP_LOGCONFIG(TAG, "  models:");
+  for (auto &model : this->wake_word_models_) {
+    model.log_model_config();
+  }
+#ifdef USE_MICRO_WAKE_WORD_VAD
+  this->vad_model_->log_model_config();
+#endif
 }
 
 void MicroWakeWord::setup() {
   ESP_LOGCONFIG(TAG, "Setting up microWakeWord...");
 
-  if (!this->initialize_models()) {
-    ESP_LOGE(TAG, "Failed to initialize models");
-    this->mark_failed();
-    return;
-  }
-
-  ExternalRAMAllocator<int16_t> allocator(ExternalRAMAllocator<int16_t>::ALLOW_FAILURE);
-  this->input_buffer_ = allocator.allocate(INPUT_BUFFER_SIZE * sizeof(int16_t));
-  if (this->input_buffer_ == nullptr) {
-    ESP_LOGW(TAG, "Could not allocate input buffer");
-    this->mark_failed();
-    return;
-  }
-
-  this->ring_buffer_ = RingBuffer::create(BUFFER_SIZE * sizeof(int16_t));
-  if (this->ring_buffer_ == nullptr) {
-    ESP_LOGW(TAG, "Could not allocate ring buffer");
+  if (!this->register_streaming_ops_(this->streaming_op_resolver_)) {
     this->mark_failed();
     return;
   }
 
   ESP_LOGCONFIG(TAG, "Micro Wake Word initialized");
+
+  this->frontend_config_.window.size_ms = FEATURE_DURATION_MS;
+  this->frontend_config_.window.step_size_ms = this->features_step_size_;
+  this->frontend_config_.filterbank.num_channels = PREPROCESSOR_FEATURE_SIZE;
+  this->frontend_config_.filterbank.lower_band_limit = 125.0;
+  this->frontend_config_.filterbank.upper_band_limit = 7500.0;
+  this->frontend_config_.noise_reduction.smoothing_bits = 10;
+  this->frontend_config_.noise_reduction.even_smoothing = 0.025;
+  this->frontend_config_.noise_reduction.odd_smoothing = 0.06;
+  this->frontend_config_.noise_reduction.min_signal_remaining = 0.05;
+  this->frontend_config_.pcan_gain_control.enable_pcan = 1;
+  this->frontend_config_.pcan_gain_control.strength = 0.95;
+  this->frontend_config_.pcan_gain_control.offset = 80.0;
+  this->frontend_config_.pcan_gain_control.gain_bits = 21;
+  this->frontend_config_.log_scale.enable_log = 1;
+  this->frontend_config_.log_scale.scale_shift = 6;
 }
 
-int MicroWakeWord::read_microphone_() {
-  size_t bytes_read = this->microphone_->read(this->input_buffer_, INPUT_BUFFER_SIZE * sizeof(int16_t));
-  if (bytes_read == 0) {
-    return 0;
-  }
-
-  size_t bytes_free = this->ring_buffer_->free();
-
-  if (bytes_free < bytes_read) {
-    ESP_LOGW(TAG,
-             "Not enough free bytes in ring buffer to store incoming audio data (free bytes=%d, incoming bytes=%d). "
-             "Resetting the ring buffer. Wake word detection accuracy will be reduced.",
-             bytes_free, bytes_read);
-
-    this->ring_buffer_->reset();
-  }
-
-  return this->ring_buffer_->write((void *) this->input_buffer_, bytes_read);
+void MicroWakeWord::add_wake_word_model(const uint8_t *model_start, float probability_cutoff,
+                                        size_t sliding_window_average_size, const std::string &wake_word,
+                                        size_t tensor_arena_size) {
+  this->wake_word_models_.emplace_back(model_start, probability_cutoff, sliding_window_average_size, wake_word,
+                                       tensor_arena_size);
 }
 
+#ifdef USE_MICRO_WAKE_WORD_VAD
+void MicroWakeWord::add_vad_model(const uint8_t *model_start, float probability_cutoff, size_t sliding_window_size,
+                                  size_t tensor_arena_size) {
+  this->vad_model_ = make_unique<VADModel>(model_start, probability_cutoff, sliding_window_size, tensor_arena_size);
+}
+#endif
+
 void MicroWakeWord::loop() {
   switch (this->state_) {
     case State::IDLE:
@@ -124,9 +115,12 @@ void MicroWakeWord::loop() {
       }
       break;
     case State::DETECTING_WAKE_WORD:
-      this->read_microphone_();
-      if (this->detect_wake_word_()) {
-        ESP_LOGD(TAG, "Wake Word Detected");
+      while (!this->has_enough_samples_()) {
+        this->read_microphone_();
+      }
+      this->update_model_probabilities_();
+      if (this->detect_wake_words_()) {
+        ESP_LOGD(TAG, "Wake Word '%s' Detected", (this->detected_wake_word_).c_str());
         this->detected_ = true;
         this->set_state_(State::STOP_MICROPHONE);
       }
@@ -136,13 +130,16 @@ void MicroWakeWord::loop() {
       this->microphone_->stop();
       this->set_state_(State::STOPPING_MICROPHONE);
       this->high_freq_.stop();
+      this->unload_models_();
+      this->deallocate_buffers_();
       break;
     case State::STOPPING_MICROPHONE:
       if (this->microphone_->is_stopped()) {
         this->set_state_(State::IDLE);
         if (this->detected_) {
+          this->wake_word_detected_trigger_->trigger(this->detected_wake_word_);
           this->detected_ = false;
-          this->wake_word_detected_trigger_->trigger(this->wake_word_);
+          this->detected_wake_word_ = "";
         }
       }
       break;
@@ -150,14 +147,34 @@ void MicroWakeWord::loop() {
 }
 
 void MicroWakeWord::start() {
+  if (!this->is_ready()) {
+    ESP_LOGW(TAG, "Wake word detection can't start as the component hasn't been setup yet");
+    return;
+  }
+
   if (this->is_failed()) {
     ESP_LOGW(TAG, "Wake word component is marked as failed. Please check setup logs");
     return;
   }
+
+  if (!this->load_models_() || !this->allocate_buffers_()) {
+    ESP_LOGE(TAG, "Failed to load the wake word model(s) or allocate buffers");
+    this->status_set_error();
+  } else {
+    this->status_clear_error();
+  }
+
+  if (this->status_has_error()) {
+    ESP_LOGW(TAG, "Wake word component has an error. Please check logs");
+    return;
+  }
+
   if (this->state_ != State::IDLE) {
     ESP_LOGW(TAG, "Wake word is already running");
     return;
   }
+
+  this->reset_states_();
   this->set_state_(State::START_MICROPHONE);
 }
 
@@ -179,289 +196,218 @@ void MicroWakeWord::set_state_(State state) {
   this->state_ = state;
 }
 
-bool MicroWakeWord::initialize_models() {
-  ExternalRAMAllocator<uint8_t> arena_allocator(ExternalRAMAllocator<uint8_t>::ALLOW_FAILURE);
-  ExternalRAMAllocator<int8_t> features_allocator(ExternalRAMAllocator<int8_t>::ALLOW_FAILURE);
+size_t MicroWakeWord::read_microphone_() {
+  size_t bytes_read = this->microphone_->read(this->input_buffer_, INPUT_BUFFER_SIZE * sizeof(int16_t));
+  if (bytes_read == 0) {
+    return 0;
+  }
+
+  size_t bytes_free = this->ring_buffer_->free();
+
+  if (bytes_free < bytes_read) {
+    ESP_LOGW(TAG,
+             "Not enough free bytes in ring buffer to store incoming audio data (free bytes=%d, incoming bytes=%d). "
+             "Resetting the ring buffer. Wake word detection accuracy will be reduced.",
+             bytes_free, bytes_read);
+
+    this->ring_buffer_->reset();
+  }
+
+  return this->ring_buffer_->write((void *) this->input_buffer_, bytes_read);
+}
+
+bool MicroWakeWord::allocate_buffers_() {
   ExternalRAMAllocator<int16_t> audio_samples_allocator(ExternalRAMAllocator<int16_t>::ALLOW_FAILURE);
 
-  this->streaming_tensor_arena_ = arena_allocator.allocate(STREAMING_MODEL_ARENA_SIZE);
-  if (this->streaming_tensor_arena_ == nullptr) {
-    ESP_LOGE(TAG, "Could not allocate the streaming model's tensor arena.");
-    return false;
+  if (this->input_buffer_ == nullptr) {
+    this->input_buffer_ = audio_samples_allocator.allocate(INPUT_BUFFER_SIZE * sizeof(int16_t));
+    if (this->input_buffer_ == nullptr) {
+      ESP_LOGE(TAG, "Could not allocate input buffer");
+      return false;
+    }
   }
 
-  this->streaming_var_arena_ = arena_allocator.allocate(STREAMING_MODEL_VARIABLE_ARENA_SIZE);
-  if (this->streaming_var_arena_ == nullptr) {
-    ESP_LOGE(TAG, "Could not allocate the streaming model variable's tensor arena.");
-    return false;
-  }
-
-  this->preprocessor_tensor_arena_ = arena_allocator.allocate(PREPROCESSOR_ARENA_SIZE);
-  if (this->preprocessor_tensor_arena_ == nullptr) {
-    ESP_LOGE(TAG, "Could not allocate the audio preprocessor model's tensor arena.");
-    return false;
-  }
-
-  this->new_features_data_ = features_allocator.allocate(PREPROCESSOR_FEATURE_SIZE);
-  if (this->new_features_data_ == nullptr) {
-    ESP_LOGE(TAG, "Could not allocate the audio features buffer.");
-    return false;
-  }
-
-  this->preprocessor_audio_buffer_ = audio_samples_allocator.allocate(SAMPLE_DURATION_COUNT);
   if (this->preprocessor_audio_buffer_ == nullptr) {
-    ESP_LOGE(TAG, "Could not allocate the audio preprocessor's buffer.");
-    return false;
+    this->preprocessor_audio_buffer_ = audio_samples_allocator.allocate(this->new_samples_to_get_());
+    if (this->preprocessor_audio_buffer_ == nullptr) {
+      ESP_LOGE(TAG, "Could not allocate the audio preprocessor's buffer.");
+      return false;
+    }
   }
 
-  this->preprocessor_model_ = tflite::GetModel(G_AUDIO_PREPROCESSOR_INT8_TFLITE);
-  if (this->preprocessor_model_->version() != TFLITE_SCHEMA_VERSION) {
-    ESP_LOGE(TAG, "Wake word's audio preprocessor model's schema is not supported");
-    return false;
-  }
-
-  this->streaming_model_ = tflite::GetModel(this->model_start_);
-  if (this->streaming_model_->version() != TFLITE_SCHEMA_VERSION) {
-    ESP_LOGE(TAG, "Wake word's streaming model's schema is not supported");
-    return false;
-  }
-
-  static tflite::MicroMutableOpResolver<18> preprocessor_op_resolver;
-  static tflite::MicroMutableOpResolver<17> streaming_op_resolver;
-
-  if (!this->register_preprocessor_ops_(preprocessor_op_resolver))
-    return false;
-  if (!this->register_streaming_ops_(streaming_op_resolver))
-    return false;
-
-  tflite::MicroAllocator *ma =
-      tflite::MicroAllocator::Create(this->streaming_var_arena_, STREAMING_MODEL_VARIABLE_ARENA_SIZE);
-  this->mrv_ = tflite::MicroResourceVariables::Create(ma, 15);
-
-  static tflite::MicroInterpreter static_preprocessor_interpreter(
-      this->preprocessor_model_, preprocessor_op_resolver, this->preprocessor_tensor_arena_, PREPROCESSOR_ARENA_SIZE);
-
-  static tflite::MicroInterpreter static_streaming_interpreter(this->streaming_model_, streaming_op_resolver,
-                                                               this->streaming_tensor_arena_,
-                                                               STREAMING_MODEL_ARENA_SIZE, this->mrv_);
-
-  this->preprocessor_interperter_ = &static_preprocessor_interpreter;
-  this->streaming_interpreter_ = &static_streaming_interpreter;
-
-  // Allocate tensors for each models.
-  if (this->preprocessor_interperter_->AllocateTensors() != kTfLiteOk) {
-    ESP_LOGE(TAG, "Failed to allocate tensors for the audio preprocessor");
-    return false;
-  }
-  if (this->streaming_interpreter_->AllocateTensors() != kTfLiteOk) {
-    ESP_LOGE(TAG, "Failed to allocate tensors for the streaming model");
-    return false;
-  }
-
-  // Verify input tensor matches expected values
-  TfLiteTensor *input = this->streaming_interpreter_->input(0);
-  if ((input->dims->size != 3) || (input->dims->data[0] != 1) || (input->dims->data[0] != 1) ||
-      (input->dims->data[1] != 1) || (input->dims->data[2] != PREPROCESSOR_FEATURE_SIZE)) {
-    ESP_LOGE(TAG, "Wake word detection model tensor input dimensions is not 1x1x%u", input->dims->data[2]);
-    return false;
-  }
-
-  if (input->type != kTfLiteInt8) {
-    ESP_LOGE(TAG, "Wake word detection model tensor input is not int8.");
-    return false;
-  }
-
-  // Verify output tensor matches expected values
-  TfLiteTensor *output = this->streaming_interpreter_->output(0);
-  if ((output->dims->size != 2) || (output->dims->data[0] != 1) || (output->dims->data[1] != 1)) {
-    ESP_LOGE(TAG, "Wake word detection model tensor output dimensions is not 1x1.");
-  }
-
-  if (output->type != kTfLiteUInt8) {
-    ESP_LOGE(TAG, "Wake word detection model tensor input is not uint8.");
-    return false;
-  }
-
-  this->recent_streaming_probabilities_.resize(this->sliding_window_average_size_, 0.0);
-
-  return true;
-}
-
-bool MicroWakeWord::update_features_() {
-  // Retrieve strided audio samples
-  int16_t *audio_samples = nullptr;
-  if (!this->stride_audio_samples_(&audio_samples)) {
-    return false;
-  }
-
-  // Compute the features for the newest audio samples
-  if (!this->generate_single_feature_(audio_samples, SAMPLE_DURATION_COUNT, this->new_features_data_)) {
-    return false;
+  if (this->ring_buffer_ == nullptr) {
+    this->ring_buffer_ = RingBuffer::create(BUFFER_SIZE * sizeof(int16_t));
+    if (this->ring_buffer_ == nullptr) {
+      ESP_LOGE(TAG, "Could not allocate ring buffer");
+      return false;
+    }
   }
 
   return true;
 }
 
-float MicroWakeWord::perform_streaming_inference_() {
-  TfLiteTensor *input = this->streaming_interpreter_->input(0);
-
-  size_t bytes_to_copy = input->bytes;
-
-  memcpy((void *) (tflite::GetTensorData<int8_t>(input)), (const void *) (this->new_features_data_), bytes_to_copy);
-
-  uint32_t prior_invoke = millis();
-
-  TfLiteStatus invoke_status = this->streaming_interpreter_->Invoke();
-  if (invoke_status != kTfLiteOk) {
-    ESP_LOGW(TAG, "Streaming Interpreter Invoke failed");
-    return false;
-  }
-
-  ESP_LOGV(TAG, "Streaming Inference Latency=%" PRIu32 " ms", (millis() - prior_invoke));
-
-  TfLiteTensor *output = this->streaming_interpreter_->output(0);
-
-  return static_cast<float>(output->data.uint8[0]) / 255.0;
+void MicroWakeWord::deallocate_buffers_() {
+  ExternalRAMAllocator<int16_t> audio_samples_allocator(ExternalRAMAllocator<int16_t>::ALLOW_FAILURE);
+  audio_samples_allocator.deallocate(this->input_buffer_, INPUT_BUFFER_SIZE * sizeof(int16_t));
+  this->input_buffer_ = nullptr;
+  audio_samples_allocator.deallocate(this->preprocessor_audio_buffer_, this->new_samples_to_get_());
+  this->preprocessor_audio_buffer_ = nullptr;
 }
 
-bool MicroWakeWord::detect_wake_word_() {
-  // Preprocess the newest audio samples into features
-  if (!this->update_features_()) {
+bool MicroWakeWord::load_models_() {
+  // Setup preprocesor feature generator
+  if (!FrontendPopulateState(&this->frontend_config_, &this->frontend_state_, AUDIO_SAMPLE_FREQUENCY)) {
+    ESP_LOGD(TAG, "Failed to populate frontend state");
+    FrontendFreeStateContents(&this->frontend_state_);
     return false;
   }
 
-  // Perform inference
-  float streaming_prob = this->perform_streaming_inference_();
+  // Setup streaming models
+  for (auto &model : this->wake_word_models_) {
+    if (!model.load_model(this->streaming_op_resolver_)) {
+      ESP_LOGE(TAG, "Failed to initialize a wake word model.");
+      return false;
+    }
+  }
+#ifdef USE_MICRO_WAKE_WORD_VAD
+  if (!this->vad_model_->load_model(this->streaming_op_resolver_)) {
+    ESP_LOGE(TAG, "Failed to initialize VAD model.");
+    return false;
+  }
+#endif
 
-  // Add the most recent probability to the sliding window
-  this->recent_streaming_probabilities_[this->last_n_index_] = streaming_prob;
-  ++this->last_n_index_;
-  if (this->last_n_index_ == this->sliding_window_average_size_)
-    this->last_n_index_ = 0;
+  return true;
+}
 
-  float sum = 0.0;
-  for (auto &prob : this->recent_streaming_probabilities_) {
-    sum += prob;
+void MicroWakeWord::unload_models_() {
+  FrontendFreeStateContents(&this->frontend_state_);
+
+  for (auto &model : this->wake_word_models_) {
+    model.unload_model();
+  }
+#ifdef USE_MICRO_WAKE_WORD_VAD
+  this->vad_model_->unload_model();
+#endif
+}
+
+void MicroWakeWord::update_model_probabilities_() {
+  int8_t audio_features[PREPROCESSOR_FEATURE_SIZE];
+
+  if (!this->generate_features_for_window_(audio_features)) {
+    return;
   }
 
-  float sliding_window_average = sum / static_cast<float>(this->sliding_window_average_size_);
-
-  // Ensure we have enough samples since the last positive detection
+  // Increase the counter since the last positive detection
   this->ignore_windows_ = std::min(this->ignore_windows_ + 1, 0);
+
+  for (auto &model : this->wake_word_models_) {
+    // Perform inference
+    model.perform_streaming_inference(audio_features);
+  }
+#ifdef USE_MICRO_WAKE_WORD_VAD
+  this->vad_model_->perform_streaming_inference(audio_features);
+#endif
+}
+
+bool MicroWakeWord::detect_wake_words_() {
+  // Verify we have processed samples since the last positive detection
   if (this->ignore_windows_ < 0) {
     return false;
   }
 
-  // Detect the wake word if the sliding window average is above the cutoff
-  if (sliding_window_average > this->probability_cutoff_) {
-    this->ignore_windows_ = -MIN_SLICES_BEFORE_DETECTION;
-    for (auto &prob : this->recent_streaming_probabilities_) {
-      prob = 0;
-    }
+#ifdef USE_MICRO_WAKE_WORD_VAD
+  bool vad_state = this->vad_model_->determine_detected();
+#endif
 
-    ESP_LOGD(TAG, "Wake word sliding average probability is %.3f and most recent probability is %.3f",
-             sliding_window_average, streaming_prob);
-    return true;
+  for (auto &model : this->wake_word_models_) {
+    if (model.determine_detected()) {
+#ifdef USE_MICRO_WAKE_WORD_VAD
+      if (vad_state) {
+#endif
+        this->detected_wake_word_ = model.get_wake_word();
+        return true;
+#ifdef USE_MICRO_WAKE_WORD_VAD
+      } else {
+        ESP_LOGD(TAG, "Wake word model predicts %s, but VAD model doesn't.", model.get_wake_word().c_str());
+      }
+#endif
+    }
   }
 
   return false;
 }
 
-void MicroWakeWord::set_sliding_window_average_size(size_t size) {
-  this->sliding_window_average_size_ = size;
-  this->recent_streaming_probabilities_.resize(this->sliding_window_average_size_, 0.0);
+bool MicroWakeWord::has_enough_samples_() {
+  return this->ring_buffer_->available() >=
+         (this->features_step_size_ * (AUDIO_SAMPLE_FREQUENCY / 1000)) * sizeof(int16_t);
 }
 
-bool MicroWakeWord::slice_available_() {
-  size_t available = this->ring_buffer_->available();
-
-  return available > (NEW_SAMPLES_TO_GET * sizeof(int16_t));
-}
-
-bool MicroWakeWord::stride_audio_samples_(int16_t **audio_samples) {
-  if (!this->slice_available_()) {
+bool MicroWakeWord::generate_features_for_window_(int8_t features[PREPROCESSOR_FEATURE_SIZE]) {
+  // Ensure we have enough new audio samples in the ring buffer for a full window
+  if (!this->has_enough_samples_()) {
     return false;
   }
 
-  // Copy the last 320 bytes (160 samples over 10 ms) from the audio buffer to the start of the audio buffer
-  memcpy((void *) (this->preprocessor_audio_buffer_), (void *) (this->preprocessor_audio_buffer_ + NEW_SAMPLES_TO_GET),
-         HISTORY_SAMPLES_TO_KEEP * sizeof(int16_t));
-
-  // Copy 640 bytes (320 samples over 20 ms) from the ring buffer into the audio buffer offset 320 bytes (160 samples
-  // over 10 ms)
-  size_t bytes_read = this->ring_buffer_->read((void *) (this->preprocessor_audio_buffer_ + HISTORY_SAMPLES_TO_KEEP),
-                                               NEW_SAMPLES_TO_GET * sizeof(int16_t), pdMS_TO_TICKS(200));
+  size_t bytes_read = this->ring_buffer_->read((void *) (this->preprocessor_audio_buffer_),
+                                               this->new_samples_to_get_() * sizeof(int16_t), pdMS_TO_TICKS(200));
 
   if (bytes_read == 0) {
     ESP_LOGE(TAG, "Could not read data from Ring Buffer");
-  } else if (bytes_read < NEW_SAMPLES_TO_GET * sizeof(int16_t)) {
+  } else if (bytes_read < this->new_samples_to_get_() * sizeof(int16_t)) {
     ESP_LOGD(TAG, "Partial Read of Data by Model");
     ESP_LOGD(TAG, "Could only read %d bytes when required %d bytes ", bytes_read,
-             (int) (NEW_SAMPLES_TO_GET * sizeof(int16_t)));
+             (int) (this->new_samples_to_get_() * sizeof(int16_t)));
     return false;
   }
 
-  *audio_samples = this->preprocessor_audio_buffer_;
-  return true;
-}
+  size_t num_samples_read;
+  struct FrontendOutput frontend_output = FrontendProcessSamples(
+      &this->frontend_state_, this->preprocessor_audio_buffer_, this->new_samples_to_get_(), &num_samples_read);
 
-bool MicroWakeWord::generate_single_feature_(const int16_t *audio_data, const int audio_data_size,
-                                             int8_t feature_output[PREPROCESSOR_FEATURE_SIZE]) {
-  TfLiteTensor *input = this->preprocessor_interperter_->input(0);
-  TfLiteTensor *output = this->preprocessor_interperter_->output(0);
-  std::copy_n(audio_data, audio_data_size, tflite::GetTensorData<int16_t>(input));
-
-  if (this->preprocessor_interperter_->Invoke() != kTfLiteOk) {
-    ESP_LOGE(TAG, "Failed to preprocess audio for local wake word.");
-    return false;
+  for (size_t i = 0; i < frontend_output.size; ++i) {
+    // These scaling values are set to match the TFLite audio frontend int8 output.
+    // The feature pipeline outputs 16-bit signed integers in roughly a 0 to 670
+    // range. In training, these are then arbitrarily divided by 25.6 to get
+    // float values in the rough range of 0.0 to 26.0. This scaling is performed
+    // for historical reasons, to match up with the output of other feature
+    // generators.
+    // The process is then further complicated when we quantize the model. This
+    // means we have to scale the 0.0 to 26.0 real values to the -128 to 127
+    // signed integer numbers.
+    // All this means that to get matching values from our integer feature
+    // output into the tensor input, we have to perform:
+    // input = (((feature / 25.6) / 26.0) * 256) - 128
+    // To simplify this and perform it in 32-bit integer math, we rearrange to:
+    // input = (feature * 256) / (25.6 * 26.0) - 128
+    constexpr int32_t value_scale = 256;
+    constexpr int32_t value_div = 666;  // 666 = 25.6 * 26.0 after rounding
+    int32_t value = ((frontend_output.values[i] * value_scale) + (value_div / 2)) / value_div;
+    value -= 128;
+    if (value < -128) {
+      value = -128;
+    }
+    if (value > 127) {
+      value = 127;
+    }
+    features[i] = value;
   }
-  std::memcpy(feature_output, tflite::GetTensorData<int8_t>(output), PREPROCESSOR_FEATURE_SIZE * sizeof(int8_t));
 
   return true;
 }
 
-bool MicroWakeWord::register_preprocessor_ops_(tflite::MicroMutableOpResolver<18> &op_resolver) {
-  if (op_resolver.AddReshape() != kTfLiteOk)
-    return false;
-  if (op_resolver.AddCast() != kTfLiteOk)
-    return false;
-  if (op_resolver.AddStridedSlice() != kTfLiteOk)
-    return false;
-  if (op_resolver.AddConcatenation() != kTfLiteOk)
-    return false;
-  if (op_resolver.AddMul() != kTfLiteOk)
-    return false;
-  if (op_resolver.AddAdd() != kTfLiteOk)
-    return false;
-  if (op_resolver.AddDiv() != kTfLiteOk)
-    return false;
-  if (op_resolver.AddMinimum() != kTfLiteOk)
-    return false;
-  if (op_resolver.AddMaximum() != kTfLiteOk)
-    return false;
-  if (op_resolver.AddWindow() != kTfLiteOk)
-    return false;
-  if (op_resolver.AddFftAutoScale() != kTfLiteOk)
-    return false;
-  if (op_resolver.AddRfft() != kTfLiteOk)
-    return false;
-  if (op_resolver.AddEnergy() != kTfLiteOk)
-    return false;
-  if (op_resolver.AddFilterBank() != kTfLiteOk)
-    return false;
-  if (op_resolver.AddFilterBankSquareRoot() != kTfLiteOk)
-    return false;
-  if (op_resolver.AddFilterBankSpectralSubtraction() != kTfLiteOk)
-    return false;
-  if (op_resolver.AddPCAN() != kTfLiteOk)
-    return false;
-  if (op_resolver.AddFilterBankLog() != kTfLiteOk)
-    return false;
-
-  return true;
+void MicroWakeWord::reset_states_() {
+  ESP_LOGD(TAG, "Resetting buffers and probabilities");
+  this->ring_buffer_->reset();
+  this->ignore_windows_ = -MIN_SLICES_BEFORE_DETECTION;
+  for (auto &model : this->wake_word_models_) {
+    model.reset_probabilities();
+  }
+#ifdef USE_MICRO_WAKE_WORD_VAD
+  this->vad_model_->reset_probabilities();
+#endif
 }
 
-bool MicroWakeWord::register_streaming_ops_(tflite::MicroMutableOpResolver<17> &op_resolver) {
+bool MicroWakeWord::register_streaming_ops_(tflite::MicroMutableOpResolver<20> &op_resolver) {
   if (op_resolver.AddCallOnce() != kTfLiteOk)
     return false;
   if (op_resolver.AddVarHandle() != kTfLiteOk)
@@ -496,6 +442,12 @@ bool MicroWakeWord::register_streaming_ops_(tflite::MicroMutableOpResolver<17> &
     return false;
   if (op_resolver.AddMaxPool2D() != kTfLiteOk)
     return false;
+  if (op_resolver.AddPad() != kTfLiteOk)
+    return false;
+  if (op_resolver.AddPack() != kTfLiteOk)
+    return false;
+  if (op_resolver.AddSplitV() != kTfLiteOk)
+    return false;
 
   return true;
 }
@@ -504,5 +456,3 @@ bool MicroWakeWord::register_streaming_ops_(tflite::MicroMutableOpResolver<17> &
 }  // namespace esphome
 
 #endif  // USE_ESP_IDF
-
-#endif  // CLANG_TIDY
diff --git a/esphome/components/micro_wake_word/micro_wake_word.h b/esphome/components/micro_wake_word/micro_wake_word.h
index 1d7c18d686..0c805b75fc 100644
--- a/esphome/components/micro_wake_word/micro_wake_word.h
+++ b/esphome/components/micro_wake_word/micro_wake_word.h
@@ -1,21 +1,18 @@
 #pragma once
 
-/**
- * This is a workaround until we can figure out a way to get
- * the tflite-micro idf component code available in CI
- *
- * */
-//
-#ifndef CLANG_TIDY
-
 #ifdef USE_ESP_IDF
 
+#include "preprocessor_settings.h"
+#include "streaming_model.h"
+
 #include "esphome/core/automation.h"
 #include "esphome/core/component.h"
 #include "esphome/core/ring_buffer.h"
 
 #include "esphome/components/microphone/microphone.h"
 
+#include <frontend_util.h>
+
 #include <tensorflow/lite/core/c/common.h>
 #include <tensorflow/lite/micro/micro_interpreter.h>
 #include <tensorflow/lite/micro/micro_mutable_op_resolver.h>
@@ -23,35 +20,6 @@
 namespace esphome {
 namespace micro_wake_word {
 
-// The following are dictated by the preprocessor model
-//
-// The number of features the audio preprocessor generates per slice
-static const uint8_t PREPROCESSOR_FEATURE_SIZE = 40;
-// How frequently the preprocessor generates a new set of features
-static const uint8_t FEATURE_STRIDE_MS = 20;
-// Duration of each slice used as input into the preprocessor
-static const uint8_t FEATURE_DURATION_MS = 30;
-// Audio sample frequency in hertz
-static const uint16_t AUDIO_SAMPLE_FREQUENCY = 16000;
-// The number of old audio samples that are saved to be part of the next feature window
-static const uint16_t HISTORY_SAMPLES_TO_KEEP =
-    ((FEATURE_DURATION_MS - FEATURE_STRIDE_MS) * (AUDIO_SAMPLE_FREQUENCY / 1000));
-// The number of new audio samples to receive to be included with the next feature window
-static const uint16_t NEW_SAMPLES_TO_GET = (FEATURE_STRIDE_MS * (AUDIO_SAMPLE_FREQUENCY / 1000));
-// The total number of audio samples included in the feature window
-static const uint16_t SAMPLE_DURATION_COUNT = FEATURE_DURATION_MS * AUDIO_SAMPLE_FREQUENCY / 1000;
-// Number of bytes in memory needed for the preprocessor arena
-static const uint32_t PREPROCESSOR_ARENA_SIZE = 9528;
-
-// The following configure the streaming wake word model
-//
-// The number of audio slices to process before accepting a positive detection
-static const uint8_t MIN_SLICES_BEFORE_DETECTION = 74;
-
-// Number of bytes in memory needed for the streaming wake word model
-static const uint32_t STREAMING_MODEL_ARENA_SIZE = 64000;
-static const uint32_t STREAMING_MODEL_VARIABLE_ARENA_SIZE = 1024;
-
 enum State {
   IDLE,
   START_MICROPHONE,
@@ -61,6 +29,9 @@ enum State {
   STOPPING_MICROPHONE,
 };
 
+// The number of audio slices to process before accepting a positive detection
+static const uint8_t MIN_SLICES_BEFORE_DETECTION = 74;
+
 class MicroWakeWord : public Component {
  public:
   void setup() override;
@@ -73,28 +44,21 @@ class MicroWakeWord : public Component {
 
   bool is_running() const { return this->state_ != State::IDLE; }
 
-  bool initialize_models();
-
-  std::string get_wake_word() { return this->wake_word_; }
-
-  // Increasing either of these will reduce the rate of false acceptances while increasing the false rejection rate
-  void set_probability_cutoff(float probability_cutoff) { this->probability_cutoff_ = probability_cutoff; }
-  void set_sliding_window_average_size(size_t size);
+  void set_features_step_size(uint8_t step_size) { this->features_step_size_ = step_size; }
 
   void set_microphone(microphone::Microphone *microphone) { this->microphone_ = microphone; }
 
   Trigger<std::string> *get_wake_word_detected_trigger() const { return this->wake_word_detected_trigger_; }
 
-  void set_model_start(const uint8_t *model_start) { this->model_start_ = model_start; }
-  void set_wake_word(const std::string &wake_word) { this->wake_word_ = wake_word; }
+  void add_wake_word_model(const uint8_t *model_start, float probability_cutoff, size_t sliding_window_average_size,
+                           const std::string &wake_word, size_t tensor_arena_size);
+
+#ifdef USE_MICRO_WAKE_WORD_VAD
+  void add_vad_model(const uint8_t *model_start, float probability_cutoff, size_t sliding_window_size,
+                     size_t tensor_arena_size);
+#endif
 
  protected:
-  void set_state_(State state);
-  int read_microphone_();
-
-  const uint8_t *model_start_;
-  std::string wake_word_;
-
   microphone::Microphone *microphone_{nullptr};
   Trigger<std::string> *wake_word_detected_trigger_ = new Trigger<std::string>();
   State state_{State::IDLE};
@@ -102,85 +66,93 @@ class MicroWakeWord : public Component {
 
   std::unique_ptr<RingBuffer> ring_buffer_;
 
-  int16_t *input_buffer_;
+  std::vector<WakeWordModel> wake_word_models_;
 
-  const tflite::Model *preprocessor_model_{nullptr};
-  const tflite::Model *streaming_model_{nullptr};
-  tflite::MicroInterpreter *streaming_interpreter_{nullptr};
-  tflite::MicroInterpreter *preprocessor_interperter_{nullptr};
+#ifdef USE_MICRO_WAKE_WORD_VAD
+  std::unique_ptr<VADModel> vad_model_;
+#endif
 
-  std::vector<float> recent_streaming_probabilities_;
-  size_t last_n_index_{0};
+  tflite::MicroMutableOpResolver<20> streaming_op_resolver_;
 
-  float probability_cutoff_{0.5};
-  size_t sliding_window_average_size_{10};
+  // Audio frontend handles generating spectrogram features
+  struct FrontendConfig frontend_config_;
+  struct FrontendState frontend_state_;
 
-  // When the wake word detection first starts or after the word has been detected once, we ignore this many audio
-  // feature slices before accepting a positive detection again
+  // When the wake word detection first starts, we ignore this many audio
+  // feature slices before accepting a positive detection
   int16_t ignore_windows_{-MIN_SLICES_BEFORE_DETECTION};
 
-  uint8_t *streaming_var_arena_{nullptr};
-  uint8_t *streaming_tensor_arena_{nullptr};
-  uint8_t *preprocessor_tensor_arena_{nullptr};
-  int8_t *new_features_data_{nullptr};
+  uint8_t features_step_size_;
 
-  tflite::MicroResourceVariables *mrv_{nullptr};
-
-  // Stores audio fed into feature generator preprocessor
-  int16_t *preprocessor_audio_buffer_;
+  // Stores audio read from the microphone before being added to the ring buffer.
+  int16_t *input_buffer_{nullptr};
+  // Stores audio to be fed into the audio frontend for generating features.
+  int16_t *preprocessor_audio_buffer_{nullptr};
 
   bool detected_{false};
+  std::string detected_wake_word_{""};
 
-  /** Detects if wake word has been said
+  void set_state_(State state);
+
+  /// @brief Tests if there are enough samples in the ring buffer to generate new features.
+  /// @return True if enough samples, false otherwise.
+  bool has_enough_samples_();
+
+  /** Reads audio from microphone into the ring buffer
+   *
+   * Audio data (16000 kHz with int16 samples) is read into the input_buffer_.
+   * Verifies the ring buffer has enough space for all audio data. If not, it logs
+   * a warning and resets the ring buffer entirely.
+   * @return Number of bytes written to the ring buffer
+   */
+  size_t read_microphone_();
+
+  /// @brief Allocates memory for input_buffer_, preprocessor_audio_buffer_, and ring_buffer_
+  /// @return True if successful, false otherwise
+  bool allocate_buffers_();
+
+  /// @brief Frees memory allocated for input_buffer_ and preprocessor_audio_buffer_
+  void deallocate_buffers_();
+
+  /// @brief Loads streaming models and prepares the feature generation frontend
+  /// @return True if successful, false otherwise
+  bool load_models_();
+
+  /// @brief Deletes each model's TFLite interpreters and frees tensor arena memory. Frees memory used by the feature
+  /// generation frontend.
+  void unload_models_();
+
+  /** Performs inference with each configured model
    *
    * If enough audio samples are available, it will generate one slice of new features.
-   * If the streaming model predicts the wake word, then the nonstreaming model confirms it.
-   * @param ring_Buffer Ring buffer containing raw audio samples
-   * @return True if the wake word is detected, false otherwise
+   * It then loops through and performs inference with each of the loaded models.
    */
-  bool detect_wake_word_();
+  void update_model_probabilities_();
 
-  /// @brief Returns true if there are enough audio samples in the buffer to generate another slice of features
-  bool slice_available_();
-
-  /** Shifts previous feature slices over by one and generates a new slice of features
+  /** Checks every model's recent probabilities to determine if the wake word has been predicted
    *
-   * @param ring_buffer ring buffer containing raw audio samples
-   * @return True if a new slice of features was generated, false otherwise
+   * Verifies the models have processed enough new samples for accurate predictions.
+   * Sets detected_wake_word_ to the wake word, if one is detected.
+   * @return True if a wake word is predicted, false otherwise
    */
-  bool update_features_();
+  bool detect_wake_words_();
 
-  /** Generates features from audio samples
+  /** Generates features for a window of audio samples
    *
-   * Adapted from TFLite micro speech example
-   * @param audio_data Pointer to array with the audio samples
-   * @param audio_data_size The number of samples to use as input to the preprocessor model
-   * @param feature_output Array that will store the features
+   * Reads samples from the ring buffer and feeds them into the preprocessor frontend.
+   * Adapted from TFLite microspeech frontend.
+   * @param features int8_t array to store the audio features
    * @return True if successful, false otherwise.
    */
-  bool generate_single_feature_(const int16_t *audio_data, int audio_data_size,
-                                int8_t feature_output[PREPROCESSOR_FEATURE_SIZE]);
+  bool generate_features_for_window_(int8_t features[PREPROCESSOR_FEATURE_SIZE]);
 
-  /** Performs inference over the most recent feature slice with the streaming model
-   *
-   * @return Probability of the wake word between 0.0 and 1.0
-   */
-  float perform_streaming_inference_();
-
-  /** Strides the audio samples by keeping the last 10 ms of the previous slice
-   *
-   * Adapted from the TFLite micro speech example
-   * @param ring_buffer Ring buffer containing raw audio samples
-   * @param audio_samples Pointer to an array that will store the strided audio samples
-   * @return True if successful, false otherwise
-   */
-  bool stride_audio_samples_(int16_t **audio_samples);
-
-  /// @brief Returns true if successfully registered the preprocessor's TensorFlow operations
-  bool register_preprocessor_ops_(tflite::MicroMutableOpResolver<18> &op_resolver);
+  /// @brief Resets the ring buffer, ignore_windows_, and sliding window probabilities
+  void reset_states_();
 
   /// @brief Returns true if successfully registered the streaming model's TensorFlow operations
-  bool register_streaming_ops_(tflite::MicroMutableOpResolver<17> &op_resolver);
+  bool register_streaming_ops_(tflite::MicroMutableOpResolver<20> &op_resolver);
+
+  inline uint16_t new_samples_to_get_() { return (this->features_step_size_ * (AUDIO_SAMPLE_FREQUENCY / 1000)); }
 };
 
 template<typename... Ts> class StartAction : public Action<Ts...>, public Parented<MicroWakeWord> {
@@ -202,5 +174,3 @@ template<typename... Ts> class IsRunningCondition : public Condition<Ts...>, pub
 }  // namespace esphome
 
 #endif  // USE_ESP_IDF
-
-#endif  // CLANG_TIDY
diff --git a/esphome/components/micro_wake_word/preprocessor_settings.h b/esphome/components/micro_wake_word/preprocessor_settings.h
new file mode 100644
index 0000000000..03f4fb5230
--- /dev/null
+++ b/esphome/components/micro_wake_word/preprocessor_settings.h
@@ -0,0 +1,20 @@
+#pragma once
+
+#ifdef USE_ESP_IDF
+
+#include <cstdint>
+
+namespace esphome {
+namespace micro_wake_word {
+
+// The number of features the audio preprocessor generates per slice
+static const uint8_t PREPROCESSOR_FEATURE_SIZE = 40;
+// Duration of each slice used as input into the preprocessor
+static const uint8_t FEATURE_DURATION_MS = 30;
+// Audio sample frequency in hertz
+static const uint16_t AUDIO_SAMPLE_FREQUENCY = 16000;
+
+}  // namespace micro_wake_word
+}  // namespace esphome
+
+#endif
diff --git a/esphome/components/micro_wake_word/streaming_model.cpp b/esphome/components/micro_wake_word/streaming_model.cpp
new file mode 100644
index 0000000000..013fa2ce6e
--- /dev/null
+++ b/esphome/components/micro_wake_word/streaming_model.cpp
@@ -0,0 +1,189 @@
+#ifdef USE_ESP_IDF
+
+#include "streaming_model.h"
+
+#include "esphome/core/hal.h"
+#include "esphome/core/helpers.h"
+#include "esphome/core/log.h"
+
+static const char *const TAG = "micro_wake_word";
+
+namespace esphome {
+namespace micro_wake_word {
+
+void WakeWordModel::log_model_config() {
+  ESP_LOGCONFIG(TAG, "    - Wake Word: %s", this->wake_word_.c_str());
+  ESP_LOGCONFIG(TAG, "      Probability cutoff: %.3f", this->probability_cutoff_);
+  ESP_LOGCONFIG(TAG, "      Sliding window size: %d", this->sliding_window_size_);
+}
+
+void VADModel::log_model_config() {
+  ESP_LOGCONFIG(TAG, "    - VAD Model");
+  ESP_LOGCONFIG(TAG, "      Probability cutoff: %.3f", this->probability_cutoff_);
+  ESP_LOGCONFIG(TAG, "      Sliding window size: %d", this->sliding_window_size_);
+}
+
+bool StreamingModel::load_model(tflite::MicroMutableOpResolver<20> &op_resolver) {
+  ExternalRAMAllocator<uint8_t> arena_allocator(ExternalRAMAllocator<uint8_t>::ALLOW_FAILURE);
+
+  if (this->tensor_arena_ == nullptr) {
+    this->tensor_arena_ = arena_allocator.allocate(this->tensor_arena_size_);
+    if (this->tensor_arena_ == nullptr) {
+      ESP_LOGE(TAG, "Could not allocate the streaming model's tensor arena.");
+      return false;
+    }
+  }
+
+  if (this->var_arena_ == nullptr) {
+    this->var_arena_ = arena_allocator.allocate(STREAMING_MODEL_VARIABLE_ARENA_SIZE);
+    if (this->var_arena_ == nullptr) {
+      ESP_LOGE(TAG, "Could not allocate the streaming model's variable tensor arena.");
+      return false;
+    }
+    this->ma_ = tflite::MicroAllocator::Create(this->var_arena_, STREAMING_MODEL_VARIABLE_ARENA_SIZE);
+    this->mrv_ = tflite::MicroResourceVariables::Create(this->ma_, 20);
+  }
+
+  const tflite::Model *model = tflite::GetModel(this->model_start_);
+  if (model->version() != TFLITE_SCHEMA_VERSION) {
+    ESP_LOGE(TAG, "Streaming model's schema is not supported");
+    return false;
+  }
+
+  if (this->interpreter_ == nullptr) {
+    this->interpreter_ = make_unique<tflite::MicroInterpreter>(
+        tflite::GetModel(this->model_start_), op_resolver, this->tensor_arena_, this->tensor_arena_size_, this->mrv_);
+    if (this->interpreter_->AllocateTensors() != kTfLiteOk) {
+      ESP_LOGE(TAG, "Failed to allocate tensors for the streaming model");
+      return false;
+    }
+
+    // Verify input tensor matches expected values
+    // Dimension 3 will represent the first layer stride, so skip it may vary
+    TfLiteTensor *input = this->interpreter_->input(0);
+    if ((input->dims->size != 3) || (input->dims->data[0] != 1) ||
+        (input->dims->data[2] != PREPROCESSOR_FEATURE_SIZE)) {
+      ESP_LOGE(TAG, "Streaming model tensor input dimensions has improper dimensions.");
+      return false;
+    }
+
+    if (input->type != kTfLiteInt8) {
+      ESP_LOGE(TAG, "Streaming model tensor input is not int8.");
+      return false;
+    }
+
+    // Verify output tensor matches expected values
+    TfLiteTensor *output = this->interpreter_->output(0);
+    if ((output->dims->size != 2) || (output->dims->data[0] != 1) || (output->dims->data[1] != 1)) {
+      ESP_LOGE(TAG, "Streaming model tensor output dimension is not 1x1.");
+    }
+
+    if (output->type != kTfLiteUInt8) {
+      ESP_LOGE(TAG, "Streaming model tensor output is not uint8.");
+      return false;
+    }
+  }
+
+  return true;
+}
+
+void StreamingModel::unload_model() {
+  this->interpreter_.reset();
+
+  ExternalRAMAllocator<uint8_t> arena_allocator(ExternalRAMAllocator<uint8_t>::ALLOW_FAILURE);
+
+  arena_allocator.deallocate(this->tensor_arena_, this->tensor_arena_size_);
+  this->tensor_arena_ = nullptr;
+  arena_allocator.deallocate(this->var_arena_, STREAMING_MODEL_VARIABLE_ARENA_SIZE);
+  this->var_arena_ = nullptr;
+}
+
+bool StreamingModel::perform_streaming_inference(const int8_t features[PREPROCESSOR_FEATURE_SIZE]) {
+  if (this->interpreter_ != nullptr) {
+    TfLiteTensor *input = this->interpreter_->input(0);
+
+    std::memmove(
+        (int8_t *) (tflite::GetTensorData<int8_t>(input)) + PREPROCESSOR_FEATURE_SIZE * this->current_stride_step_,
+        features, PREPROCESSOR_FEATURE_SIZE);
+    ++this->current_stride_step_;
+
+    uint8_t stride = this->interpreter_->input(0)->dims->data[1];
+
+    if (this->current_stride_step_ >= stride) {
+      this->current_stride_step_ = 0;
+
+      TfLiteStatus invoke_status = this->interpreter_->Invoke();
+      if (invoke_status != kTfLiteOk) {
+        ESP_LOGW(TAG, "Streaming interpreter invoke failed");
+        return false;
+      }
+
+      TfLiteTensor *output = this->interpreter_->output(0);
+
+      ++this->last_n_index_;
+      if (this->last_n_index_ == this->sliding_window_size_)
+        this->last_n_index_ = 0;
+      this->recent_streaming_probabilities_[this->last_n_index_] = output->data.uint8[0];  // probability;
+    }
+    return true;
+  }
+  ESP_LOGE(TAG, "Streaming interpreter is not initialized.");
+  return false;
+}
+
+void StreamingModel::reset_probabilities() {
+  for (auto &prob : this->recent_streaming_probabilities_) {
+    prob = 0;
+  }
+}
+
+WakeWordModel::WakeWordModel(const uint8_t *model_start, float probability_cutoff, size_t sliding_window_average_size,
+                             const std::string &wake_word, size_t tensor_arena_size) {
+  this->model_start_ = model_start;
+  this->probability_cutoff_ = probability_cutoff;
+  this->sliding_window_size_ = sliding_window_average_size;
+  this->recent_streaming_probabilities_.resize(sliding_window_average_size, 0);
+  this->wake_word_ = wake_word;
+  this->tensor_arena_size_ = tensor_arena_size;
+};
+
+bool WakeWordModel::determine_detected() {
+  int32_t sum = 0;
+  for (auto &prob : this->recent_streaming_probabilities_) {
+    sum += prob;
+  }
+
+  float sliding_window_average = static_cast<float>(sum) / static_cast<float>(255 * this->sliding_window_size_);
+
+  // Detect the wake word if the sliding window average is above the cutoff
+  if (sliding_window_average > this->probability_cutoff_) {
+    ESP_LOGD(TAG, "The '%s' model sliding average probability is %.3f and most recent probability is %.3f",
+             this->wake_word_.c_str(), sliding_window_average,
+             this->recent_streaming_probabilities_[this->last_n_index_] / (255.0));
+    return true;
+  }
+  return false;
+}
+
+VADModel::VADModel(const uint8_t *model_start, float probability_cutoff, size_t sliding_window_size,
+                   size_t tensor_arena_size) {
+  this->model_start_ = model_start;
+  this->probability_cutoff_ = probability_cutoff;
+  this->sliding_window_size_ = sliding_window_size;
+  this->recent_streaming_probabilities_.resize(sliding_window_size, 0);
+  this->tensor_arena_size_ = tensor_arena_size;
+};
+
+bool VADModel::determine_detected() {
+  uint8_t max = 0;
+  for (auto &prob : this->recent_streaming_probabilities_) {
+    max = std::max(prob, max);
+  }
+
+  return max > this->probability_cutoff_;
+}
+
+}  // namespace micro_wake_word
+}  // namespace esphome
+
+#endif
diff --git a/esphome/components/micro_wake_word/streaming_model.h b/esphome/components/micro_wake_word/streaming_model.h
new file mode 100644
index 0000000000..0d85579f35
--- /dev/null
+++ b/esphome/components/micro_wake_word/streaming_model.h
@@ -0,0 +1,84 @@
+#pragma once
+
+#ifdef USE_ESP_IDF
+
+#include "preprocessor_settings.h"
+
+#include <tensorflow/lite/core/c/common.h>
+#include <tensorflow/lite/micro/micro_interpreter.h>
+#include <tensorflow/lite/micro/micro_mutable_op_resolver.h>
+
+namespace esphome {
+namespace micro_wake_word {
+
+static const uint32_t STREAMING_MODEL_VARIABLE_ARENA_SIZE = 1024;
+
+class StreamingModel {
+ public:
+  virtual void log_model_config() = 0;
+  virtual bool determine_detected() = 0;
+
+  bool perform_streaming_inference(const int8_t features[PREPROCESSOR_FEATURE_SIZE]);
+
+  /// @brief Sets all recent_streaming_probabilities to 0
+  void reset_probabilities();
+
+  /// @brief Allocates tensor and variable arenas and sets up the model interpreter
+  /// @param op_resolver MicroMutableOpResolver object that must exist until the model is unloaded
+  /// @return True if successful, false otherwise
+  bool load_model(tflite::MicroMutableOpResolver<20> &op_resolver);
+
+  /// @brief Destroys the TFLite interpreter and frees the tensor and variable arenas' memory
+  void unload_model();
+
+ protected:
+  uint8_t current_stride_step_{0};
+
+  float probability_cutoff_;
+  size_t sliding_window_size_;
+  size_t last_n_index_{0};
+  size_t tensor_arena_size_;
+  std::vector<uint8_t> recent_streaming_probabilities_;
+
+  const uint8_t *model_start_;
+  uint8_t *tensor_arena_{nullptr};
+  uint8_t *var_arena_{nullptr};
+  std::unique_ptr<tflite::MicroInterpreter> interpreter_;
+  tflite::MicroResourceVariables *mrv_{nullptr};
+  tflite::MicroAllocator *ma_{nullptr};
+};
+
+class WakeWordModel final : public StreamingModel {
+ public:
+  WakeWordModel(const uint8_t *model_start, float probability_cutoff, size_t sliding_window_average_size,
+                const std::string &wake_word, size_t tensor_arena_size);
+
+  void log_model_config() override;
+
+  /// @brief Checks for the wake word by comparing the mean probability in the sliding window with the probability
+  /// cutoff
+  /// @return True if wake word is detected, false otherwise
+  bool determine_detected() override;
+
+  const std::string &get_wake_word() const { return this->wake_word_; }
+
+ protected:
+  std::string wake_word_;
+};
+
+class VADModel final : public StreamingModel {
+ public:
+  VADModel(const uint8_t *model_start, float probability_cutoff, size_t sliding_window_size, size_t tensor_arena_size);
+
+  void log_model_config() override;
+
+  /// @brief Checks for voice activity by comparing the max probability in the sliding window with the probability
+  /// cutoff
+  /// @return True if voice activity is detected, false otherwise
+  bool determine_detected() override;
+};
+
+}  // namespace micro_wake_word
+}  // namespace esphome
+
+#endif
diff --git a/esphome/components/midea/climate.py b/esphome/components/midea/climate.py
index 83540a061a..e5612796a3 100644
--- a/esphome/components/midea/climate.py
+++ b/esphome/components/midea/climate.py
@@ -293,4 +293,4 @@ async def to_code(config):
     if CONF_HUMIDITY_SETPOINT in config:
         sens = await sensor.new_sensor(config[CONF_HUMIDITY_SETPOINT])
         cg.add(var.set_humidity_setpoint_sensor(sens))
-    cg.add_library("dudanov/MideaUART", "1.1.8")
+    cg.add_library("dudanov/MideaUART", "1.1.9")
diff --git a/esphome/components/mitsubishi/mitsubishi.cpp b/esphome/components/mitsubishi/mitsubishi.cpp
index fd57adc586..a02aabf14d 100644
--- a/esphome/components/mitsubishi/mitsubishi.cpp
+++ b/esphome/components/mitsubishi/mitsubishi.cpp
@@ -52,6 +52,7 @@ const uint8_t MITSUBISHI_BYTE16 = 0X00;
 
 climate::ClimateTraits MitsubishiClimate::traits() {
   auto traits = climate::ClimateTraits();
+  traits.set_supports_current_temperature(this->sensor_ != nullptr);
   traits.set_supports_action(false);
   traits.set_visual_min_temperature(MITSUBISHI_TEMP_MIN);
   traits.set_visual_max_temperature(MITSUBISHI_TEMP_MAX);
diff --git a/esphome/components/modbus_controller/modbus_controller.cpp b/esphome/components/modbus_controller/modbus_controller.cpp
index 9f73988b03..29d3137603 100644
--- a/esphome/components/modbus_controller/modbus_controller.cpp
+++ b/esphome/components/modbus_controller/modbus_controller.cpp
@@ -116,7 +116,8 @@ void ModbusController::on_modbus_read_registers(uint8_t function_code, uint16_t
         ESP_LOGD(TAG, "Matched register. Address: 0x%02X. Value type: %zu. Register count: %u. Value: %0.1f.",
                  server_register->address, static_cast<uint8_t>(server_register->value_type),
                  server_register->register_count, value);
-        number_to_payload(sixteen_bit_response, value, server_register->value_type);
+        std::vector<uint16_t> payload = float_to_payload(value, server_register->value_type);
+        sixteen_bit_response.insert(sixteen_bit_response.end(), payload.cbegin(), payload.cend());
         current_address += server_register->register_count;
         found = true;
         break;
diff --git a/esphome/components/modbus_controller/text_sensor/__init__.py b/esphome/components/modbus_controller/text_sensor/__init__.py
index 763336e104..81d6453c6f 100644
--- a/esphome/components/modbus_controller/text_sensor/__init__.py
+++ b/esphome/components/modbus_controller/text_sensor/__init__.py
@@ -37,6 +37,7 @@ RAW_ENCODING = {
     "NONE": RawEncoding.NONE,
     "HEXBYTES": RawEncoding.HEXBYTES,
     "COMMA": RawEncoding.COMMA,
+    "ANSI": RawEncoding.ANSI,
 }
 
 CONFIG_SCHEMA = cv.All(
@@ -49,7 +50,7 @@ CONFIG_SCHEMA = cv.All(
             cv.Optional(CONF_REGISTER_TYPE): cv.enum(MODBUS_REGISTER_TYPE),
             cv.Optional(CONF_REGISTER_COUNT, default=0): cv.positive_int,
             cv.Optional(CONF_RESPONSE_SIZE, default=2): cv.positive_int,
-            cv.Optional(CONF_RAW_ENCODE, default="NONE"): cv.enum(RAW_ENCODING),
+            cv.Optional(CONF_RAW_ENCODE, default="ANSI"): cv.enum(RAW_ENCODING),
         }
     ),
     validate_modbus_register,
diff --git a/esphome/components/modbus_controller/text_sensor/modbus_textsensor.cpp b/esphome/components/modbus_controller/text_sensor/modbus_textsensor.cpp
index 359c6e2f50..acdcacc083 100644
--- a/esphome/components/modbus_controller/text_sensor/modbus_textsensor.cpp
+++ b/esphome/components/modbus_controller/text_sensor/modbus_textsensor.cpp
@@ -15,7 +15,7 @@ void ModbusTextSensor::parse_and_publish(const std::vector<uint8_t> &data) {
   std::ostringstream output;
   uint8_t items_left = this->response_bytes;
   uint8_t index = this->offset;
-  char buffer[4];
+  char buffer[5];
   while ((items_left > 0) && index < data.size()) {
     uint8_t b = data[index];
     switch (this->encode_) {
@@ -27,8 +27,11 @@ void ModbusTextSensor::parse_and_publish(const std::vector<uint8_t> &data) {
         sprintf(buffer, index != this->offset ? ",%d" : "%d", b);
         output << buffer;
         break;
+      case RawEncoding::ANSI:
+        if (b < 0x20)
+          break;
+      // FALLTHROUGH
       // Anything else no encoding
-      case RawEncoding::NONE:
       default:
         output << (char) b;
         break;
diff --git a/esphome/components/modbus_controller/text_sensor/modbus_textsensor.h b/esphome/components/modbus_controller/text_sensor/modbus_textsensor.h
index 9cc0db05a5..d6eb5fd230 100644
--- a/esphome/components/modbus_controller/text_sensor/modbus_textsensor.h
+++ b/esphome/components/modbus_controller/text_sensor/modbus_textsensor.h
@@ -9,7 +9,7 @@
 namespace esphome {
 namespace modbus_controller {
 
-enum class RawEncoding { NONE = 0, HEXBYTES = 1, COMMA = 2 };
+enum class RawEncoding { NONE = 0, HEXBYTES = 1, COMMA = 2, ANSI = 3 };
 
 class ModbusTextSensor : public Component, public text_sensor::TextSensor, public SensorItem {
  public:
diff --git a/esphome/components/mpr121/binary_sensor/__init__.py b/esphome/components/mpr121/binary_sensor/__init__.py
index 292c631c37..dfae92a9af 100644
--- a/esphome/components/mpr121/binary_sensor/__init__.py
+++ b/esphome/components/mpr121/binary_sensor/__init__.py
@@ -27,7 +27,7 @@ async def to_code(config):
     var = await binary_sensor.new_binary_sensor(config)
     hub = await cg.get_variable(config[CONF_MPR121_ID])
     cg.add(var.set_channel(config[CONF_CHANNEL]))
-    cg.register_parented(var, hub)
+    await cg.register_parented(var, hub)
 
     if CONF_TOUCH_THRESHOLD in config:
         cg.add(var.set_touch_threshold(config[CONF_TOUCH_THRESHOLD]))
diff --git a/esphome/components/mqtt/mqtt_datetime.cpp b/esphome/components/mqtt/mqtt_datetime.cpp
index 4fa44aafb8..4ae6d0d416 100644
--- a/esphome/components/mqtt/mqtt_datetime.cpp
+++ b/esphome/components/mqtt/mqtt_datetime.cpp
@@ -6,12 +6,12 @@
 #include "mqtt_const.h"
 
 #ifdef USE_MQTT
-#ifdef USE_DATETIME_TIME
+#ifdef USE_DATETIME_DATETIME
 
 namespace esphome {
 namespace mqtt {
 
-static const char *const TAG = "mqtt.datetime.time";
+static const char *const TAG = "mqtt.datetime.datetime";
 
 using namespace esphome::datetime;
 
@@ -80,5 +80,5 @@ bool MQTTDateTimeComponent::publish_state(uint16_t year, uint8_t month, uint8_t
 }  // namespace mqtt
 }  // namespace esphome
 
-#endif  // USE_DATETIME_TIME
+#endif  // USE_DATETIME_DATETIME
 #endif  // USE_MQTT
diff --git a/esphome/components/mqtt/mqtt_datetime.h b/esphome/components/mqtt/mqtt_datetime.h
index f0d68ad2e1..ba81c06cb3 100644
--- a/esphome/components/mqtt/mqtt_datetime.h
+++ b/esphome/components/mqtt/mqtt_datetime.h
@@ -3,7 +3,7 @@
 #include "esphome/core/defines.h"
 
 #ifdef USE_MQTT
-#ifdef USE_DATETIME_TIME
+#ifdef USE_DATETIME_DATETIME
 
 #include "esphome/components/datetime/datetime_entity.h"
 #include "mqtt_component.h"
@@ -17,7 +17,7 @@ class MQTTDateTimeComponent : public mqtt::MQTTComponent {
    *
    * @param time The time entity.
    */
-  explicit MQTTDateTimeComponent(datetime::DateTimeEntity *time);
+  explicit MQTTDateTimeComponent(datetime::DateTimeEntity *datetime);
 
   // ========== INTERNAL METHODS ==========
   // (In most use cases you won't need these)
@@ -41,5 +41,5 @@ class MQTTDateTimeComponent : public mqtt::MQTTComponent {
 }  // namespace mqtt
 }  // namespace esphome
 
-#endif  // USE_DATETIME_DATE
+#endif  // USE_DATETIME_DATETIME
 #endif  // USE_MQTT
diff --git a/esphome/components/network/__init__.py b/esphome/components/network/__init__.py
index 36144ff0a4..9ef75e0fb9 100644
--- a/esphome/components/network/__init__.py
+++ b/esphome/components/network/__init__.py
@@ -19,7 +19,12 @@ IPAddress = network_ns.class_("IPAddress")
 
 CONFIG_SCHEMA = cv.Schema(
     {
-        cv.SplitDefault(CONF_ENABLE_IPV6): cv.All(
+        cv.SplitDefault(
+            CONF_ENABLE_IPV6,
+            esp8266=False,
+            esp32=False,
+            rp2040=False,
+        ): cv.All(
             cv.boolean, cv.only_on([PLATFORM_ESP32, PLATFORM_ESP8266, PLATFORM_RP2040])
         ),
         cv.Optional(CONF_MIN_IPV6_ADDR_COUNT, default=0): cv.positive_int,
@@ -28,18 +33,17 @@ CONFIG_SCHEMA = cv.Schema(
 
 
 async def to_code(config):
-    if CONF_ENABLE_IPV6 in config:
-        cg.add_define("USE_NETWORK_IPV6", config[CONF_ENABLE_IPV6])
-        cg.add_define(
-            "USE_NETWORK_MIN_IPV6_ADDR_COUNT", config[CONF_MIN_IPV6_ADDR_COUNT]
-        )
-        if CORE.using_esp_idf:
-            add_idf_sdkconfig_option("CONFIG_LWIP_IPV6", config[CONF_ENABLE_IPV6])
-            add_idf_sdkconfig_option(
-                "CONFIG_LWIP_IPV6_AUTOCONFIG", config[CONF_ENABLE_IPV6]
+    if (enable_ipv6 := config.get(CONF_ENABLE_IPV6, None)) is not None:
+        cg.add_define("USE_NETWORK_IPV6", enable_ipv6)
+        if enable_ipv6:
+            cg.add_define(
+                "USE_NETWORK_MIN_IPV6_ADDR_COUNT", config[CONF_MIN_IPV6_ADDR_COUNT]
             )
+        if CORE.using_esp_idf:
+            add_idf_sdkconfig_option("CONFIG_LWIP_IPV6", enable_ipv6)
+            add_idf_sdkconfig_option("CONFIG_LWIP_IPV6_AUTOCONFIG", enable_ipv6)
         else:
-            if config[CONF_ENABLE_IPV6]:
+            if enable_ipv6:
                 cg.add_build_flag("-DCONFIG_LWIP_IPV6")
                 cg.add_build_flag("-DCONFIG_LWIP_IPV6_AUTOCONFIG")
                 if CORE.is_rp2040:
diff --git a/esphome/components/number/__init__.py b/esphome/components/number/__init__.py
index 303535c138..d9c16fd7a9 100644
--- a/esphome/components/number/__init__.py
+++ b/esphome/components/number/__init__.py
@@ -26,6 +26,7 @@ from esphome.const import (
     DEVICE_CLASS_BATTERY,
     DEVICE_CLASS_CARBON_DIOXIDE,
     DEVICE_CLASS_CARBON_MONOXIDE,
+    DEVICE_CLASS_CONDUCTIVITY,
     DEVICE_CLASS_CURRENT,
     DEVICE_CLASS_DATA_RATE,
     DEVICE_CLASS_DATA_SIZE,
@@ -82,6 +83,7 @@ DEVICE_CLASSES = [
     DEVICE_CLASS_BATTERY,
     DEVICE_CLASS_CARBON_DIOXIDE,
     DEVICE_CLASS_CARBON_MONOXIDE,
+    DEVICE_CLASS_CONDUCTIVITY,
     DEVICE_CLASS_CURRENT,
     DEVICE_CLASS_DATA_RATE,
     DEVICE_CLASS_DATA_SIZE,
diff --git a/esphome/components/pmsa003i/pmsa003i.cpp b/esphome/components/pmsa003i/pmsa003i.cpp
index ca3d28367a..a9665c6a5a 100644
--- a/esphome/components/pmsa003i/pmsa003i.cpp
+++ b/esphome/components/pmsa003i/pmsa003i.cpp
@@ -13,6 +13,15 @@ void PMSA003IComponent::setup() {
   PM25AQIData data;
   bool successful_read = this->read_data_(&data);
 
+  if (!successful_read) {
+    for (int i = 0; i < 3; i++) {
+      successful_read = this->read_data_(&data);
+      if (successful_read) {
+        break;
+      }
+    }
+  }
+
   if (!successful_read) {
     this->mark_failed();
     return;
diff --git a/esphome/components/qspi_amoled/display.py b/esphome/components/qspi_amoled/display.py
index 84bf9553cb..77d1e3d095 100644
--- a/esphome/components/qspi_amoled/display.py
+++ b/esphome/components/qspi_amoled/display.py
@@ -42,6 +42,14 @@ COLOR_ORDERS = {
 }
 DATA_PIN_SCHEMA = pins.internal_gpio_output_pin_schema
 
+
+def validate_dimension(value):
+    value = cv.positive_int(value)
+    if value % 2 != 0:
+        raise cv.Invalid("Width/height/offset must be divisible by 2")
+    return value
+
+
 CONFIG_SCHEMA = cv.All(
     display.FULL_DISPLAY_SCHEMA.extend(
         cv.Schema(
@@ -52,10 +60,14 @@ CONFIG_SCHEMA = cv.All(
                     cv.dimensions,
                     cv.Schema(
                         {
-                            cv.Required(CONF_WIDTH): cv.int_,
-                            cv.Required(CONF_HEIGHT): cv.int_,
-                            cv.Optional(CONF_OFFSET_HEIGHT, default=0): cv.int_,
-                            cv.Optional(CONF_OFFSET_WIDTH, default=0): cv.int_,
+                            cv.Required(CONF_WIDTH): validate_dimension,
+                            cv.Required(CONF_HEIGHT): validate_dimension,
+                            cv.Optional(
+                                CONF_OFFSET_HEIGHT, default=0
+                            ): validate_dimension,
+                            cv.Optional(
+                                CONF_OFFSET_WIDTH, default=0
+                            ): validate_dimension,
                         }
                     ),
                 ),
diff --git a/esphome/components/qspi_amoled/qspi_amoled.cpp b/esphome/components/qspi_amoled/qspi_amoled.cpp
index 697989e861..b1f651025a 100644
--- a/esphome/components/qspi_amoled/qspi_amoled.cpp
+++ b/esphome/components/qspi_amoled/qspi_amoled.cpp
@@ -25,7 +25,23 @@ void QspiAmoLed::setup() {
 }
 
 void QspiAmoLed::update() {
+  if (!this->setup_complete_) {
+    return;
+  }
   this->do_update_();
+  // Start addresses and widths/heights must be divisible by 2 (CASET/RASET restriction in datasheet)
+  if (this->x_low_ % 2 == 1) {
+    this->x_low_--;
+  }
+  if (this->x_high_ % 2 == 0) {
+    this->x_high_++;
+  }
+  if (this->y_low_ % 2 == 1) {
+    this->y_low_--;
+  }
+  if (this->y_high_ % 2 == 0) {
+    this->y_high_++;
+  }
   int w = this->x_high_ - this->x_low_ + 1;
   int h = this->y_high_ - this->y_low_ + 1;
   this->draw_pixels_at(this->x_low_, this->y_low_, w, h, this->buffer_, this->color_mode_, display::COLOR_BITNESS_565,
diff --git a/esphome/components/qspi_amoled/qspi_amoled.h b/esphome/components/qspi_amoled/qspi_amoled.h
index 28d243f548..c766b4e685 100644
--- a/esphome/components/qspi_amoled/qspi_amoled.h
+++ b/esphome/components/qspi_amoled/qspi_amoled.h
@@ -65,13 +65,10 @@ class QspiAmoLed : public display::DisplayBuffer,
 
   void set_reset_pin(GPIOPin *reset_pin) { this->reset_pin_ = reset_pin; }
   void set_enable_pin(GPIOPin *enable_pin) { this->enable_pin_ = enable_pin; }
-  void set_width(uint16_t width) { this->width_ = width; }
   void set_dimensions(uint16_t width, uint16_t height) {
     this->width_ = width;
     this->height_ = height;
   }
-  int get_width() override { return this->width_; }
-  int get_height() override { return this->height_; }
   void set_invert_colors(bool invert_colors) {
     this->invert_colors_ = invert_colors;
     this->reset_params_();
diff --git a/esphome/components/remote_base/dooya_protocol.cpp b/esphome/components/remote_base/dooya_protocol.cpp
index d979bca8c5..04c5fef8f3 100644
--- a/esphome/components/remote_base/dooya_protocol.cpp
+++ b/esphome/components/remote_base/dooya_protocol.cpp
@@ -8,10 +8,10 @@ static const char *const TAG = "remote.dooya";
 
 static const uint32_t HEADER_HIGH_US = 5000;
 static const uint32_t HEADER_LOW_US = 1500;
-static const uint32_t BIT_ZERO_HIGH_US = 750;
-static const uint32_t BIT_ZERO_LOW_US = 350;
-static const uint32_t BIT_ONE_HIGH_US = 350;
-static const uint32_t BIT_ONE_LOW_US = 750;
+static const uint32_t BIT_ZERO_HIGH_US = 350;
+static const uint32_t BIT_ZERO_LOW_US = 750;
+static const uint32_t BIT_ONE_HIGH_US = 750;
+static const uint32_t BIT_ONE_LOW_US = 350;
 
 void DooyaProtocol::encode(RemoteTransmitData *dst, const DooyaData &data) {
   dst->set_carrier_frequency(0);
diff --git a/esphome/components/remote_base/rc_switch_protocol.cpp b/esphome/components/remote_base/rc_switch_protocol.cpp
index 1f38fdca67..cb8a077975 100644
--- a/esphome/components/remote_base/rc_switch_protocol.cpp
+++ b/esphome/components/remote_base/rc_switch_protocol.cpp
@@ -54,7 +54,7 @@ void RCSwitchBase::sync(RemoteTransmitData *dst) const {
   }
 }
 void RCSwitchBase::transmit(RemoteTransmitData *dst, uint64_t code, uint8_t len) const {
-  dst->set_carrier_frequency(0);
+  dst->set_carrier_frequency(38000);
   this->sync(dst);
   for (int16_t i = len - 1; i >= 0; i--) {
     if (code & ((uint64_t) 1 << i)) {
diff --git a/esphome/components/restart/button/__init__.py b/esphome/components/restart/button/__init__.py
index 1b2c991261..6aff8cb351 100644
--- a/esphome/components/restart/button/__init__.py
+++ b/esphome/components/restart/button/__init__.py
@@ -5,6 +5,7 @@ from esphome.const import (
     CONF_ID,
     DEVICE_CLASS_RESTART,
     ENTITY_CATEGORY_CONFIG,
+    ICON_RESTART,
 )
 
 restart_ns = cg.esphome_ns.namespace("restart")
@@ -12,6 +13,7 @@ RestartButton = restart_ns.class_("RestartButton", button.Button, cg.Component)
 
 CONFIG_SCHEMA = button.button_schema(
     RestartButton,
+    icon=ICON_RESTART,
     device_class=DEVICE_CLASS_RESTART,
     entity_category=ENTITY_CATEGORY_CONFIG,
 ).extend(cv.COMPONENT_SCHEMA)
diff --git a/esphome/components/rp2040/__init__.py b/esphome/components/rp2040/__init__.py
index ace455add7..f5c3b8bda2 100644
--- a/esphome/components/rp2040/__init__.py
+++ b/esphome/components/rp2040/__init__.py
@@ -47,10 +47,16 @@ def set_core_data(config):
 def get_download_types(storage_json):
     return [
         {
-            "title": "UF2 format",
+            "title": "UF2 factory format",
             "description": "For copying to RP2040 over USB.",
             "file": "firmware.uf2",
-            "download": f"{storage_json.name}.uf2",
+            "download": f"{storage_json.name}.factory.uf2",
+        },
+        {
+            "title": "OTA format",
+            "description": "For OTA updating a device.",
+            "file": "firmware.ota.bin",
+            "download": f"{storage_json.name}.ota.bin",
         },
     ]
 
@@ -160,6 +166,8 @@ async def to_code(config):
     cg.add_define("ESPHOME_BOARD", config[CONF_BOARD])
     cg.add_define("ESPHOME_VARIANT", "RP2040")
 
+    cg.add_platformio_option("extra_scripts", ["post:post_build.py"])
+
     conf = config[CONF_FRAMEWORK]
     cg.add_platformio_option("framework", "arduino")
     cg.add_build_flag("-DUSE_ARDUINO")
@@ -225,4 +233,10 @@ def generate_pio_files() -> bool:
 
 # Called by writer.py
 def copy_files() -> bool:
+    dir = os.path.dirname(__file__)
+    post_build_file = os.path.join(dir, "post_build.py.script")
+    copy_file_if_changed(
+        post_build_file,
+        CORE.relative_build_path("post_build.py"),
+    )
     return generate_pio_files()
diff --git a/esphome/components/rp2040/post_build.py.script b/esphome/components/rp2040/post_build.py.script
new file mode 100644
index 0000000000..7dcd7e52a6
--- /dev/null
+++ b/esphome/components/rp2040/post_build.py.script
@@ -0,0 +1,23 @@
+import shutil
+
+# pylint: disable=E0602
+Import("env")  # noqa
+
+
+def rp2040_copy_factory_uf2(source, target, env):
+    firmware_name = env.subst("$BUILD_DIR/${PROGNAME}.uf2")
+    new_file_name = env.subst("$BUILD_DIR/${PROGNAME}.factory.uf2")
+
+    shutil.copyfile(firmware_name, new_file_name)
+
+
+def rp2040_copy_ota_bin(source, target, env):
+    firmware_name = env.subst("$BUILD_DIR/${PROGNAME}.bin")
+    new_file_name = env.subst("$BUILD_DIR/${PROGNAME}.ota.bin")
+
+    shutil.copyfile(firmware_name, new_file_name)
+
+
+# pylint: disable=E0602
+env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", rp2040_copy_factory_uf2)  # noqa
+env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", rp2040_copy_ota_bin)  # noqa
diff --git a/esphome/components/safe_mode/__init__.py b/esphome/components/safe_mode/__init__.py
index 881937890d..185c0e70b1 100644
--- a/esphome/components/safe_mode/__init__.py
+++ b/esphome/components/safe_mode/__init__.py
@@ -56,21 +56,20 @@ CONFIG_SCHEMA = cv.All(
 
 @coroutine_with_priority(50.0)
 async def to_code(config):
-    if config[CONF_DISABLED]:
-        return
+    if not config[CONF_DISABLED]:
+        var = cg.new_Pvariable(config[CONF_ID])
+        await cg.register_component(var, config)
 
-    var = cg.new_Pvariable(config[CONF_ID])
-    await cg.register_component(var, config)
+        for conf in config.get(CONF_ON_SAFE_MODE, []):
+            trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
+            await automation.build_automation(trigger, [], conf)
 
-    for conf in config.get(CONF_ON_SAFE_MODE, []):
-        trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
-        await automation.build_automation(trigger, [], conf)
+        condition = var.should_enter_safe_mode(
+            config[CONF_NUM_ATTEMPTS],
+            config[CONF_REBOOT_TIMEOUT],
+            config[CONF_BOOT_IS_GOOD_AFTER],
+        )
+        cg.add(RawExpression(f"if ({condition}) return"))
 
-    condition = var.should_enter_safe_mode(
-        config[CONF_NUM_ATTEMPTS],
-        config[CONF_REBOOT_TIMEOUT],
-        config[CONF_BOOT_IS_GOOD_AFTER],
-    )
-    cg.add(RawExpression(f"if ({condition}) return"))
     CORE.data[CONF_SAFE_MODE] = {}
     CORE.data[CONF_SAFE_MODE][KEY_PAST_SAFE_MODE] = True
diff --git a/esphome/components/script/__init__.py b/esphome/components/script/__init__.py
index 483357f85b..16b1d4c54e 100644
--- a/esphome/components/script/__init__.py
+++ b/esphome/components/script/__init__.py
@@ -88,7 +88,7 @@ def validate_parameter_name(value):
     raise cv.Invalid(f"Script's parameter name cannot be {CONF_ID}")
 
 
-ALLOWED_PARAM_TYPE_CHARSET = set("abcdefghijklmnopqrstuvwxyz0123456789_:*&[]")
+ALLOWED_PARAM_TYPE_CHARSET = set("abcdefghijklmnopqrstuvwxyz0123456789_:*&[]<>")
 
 
 def validate_parameter_type(value):
diff --git a/esphome/components/sensor/__init__.py b/esphome/components/sensor/__init__.py
index 6077f5dc1f..262e69d75b 100644
--- a/esphome/components/sensor/__init__.py
+++ b/esphome/components/sensor/__init__.py
@@ -43,6 +43,7 @@ from esphome.const import (
     DEVICE_CLASS_BATTERY,
     DEVICE_CLASS_CARBON_DIOXIDE,
     DEVICE_CLASS_CARBON_MONOXIDE,
+    DEVICE_CLASS_CONDUCTIVITY,
     DEVICE_CLASS_CURRENT,
     DEVICE_CLASS_DATA_RATE,
     DEVICE_CLASS_DATA_SIZE,
@@ -103,6 +104,7 @@ DEVICE_CLASSES = [
     DEVICE_CLASS_BATTERY,
     DEVICE_CLASS_CARBON_DIOXIDE,
     DEVICE_CLASS_CARBON_MONOXIDE,
+    DEVICE_CLASS_CONDUCTIVITY,
     DEVICE_CLASS_CURRENT,
     DEVICE_CLASS_DATA_RATE,
     DEVICE_CLASS_DATA_SIZE,
diff --git a/esphome/components/tuya/tuya.cpp b/esphome/components/tuya/tuya.cpp
index 402953bb3b..1443d10254 100644
--- a/esphome/components/tuya/tuya.cpp
+++ b/esphome/components/tuya/tuya.cpp
@@ -223,13 +223,19 @@ void Tuya::handle_command_(uint8_t command, uint8_t version, const uint8_t *buff
       break;
     case TuyaCommandType::DATAPOINT_DELIVER:
       break;
-    case TuyaCommandType::DATAPOINT_REPORT:
+    case TuyaCommandType::DATAPOINT_REPORT_ASYNC:
+    case TuyaCommandType::DATAPOINT_REPORT_SYNC:
       if (this->init_state_ == TuyaInitState::INIT_DATAPOINT) {
         this->init_state_ = TuyaInitState::INIT_DONE;
         this->set_timeout("datapoint_dump", 1000, [this] { this->dump_config(); });
         this->initialized_callback_.call();
       }
       this->handle_datapoints_(buffer, len);
+
+      if (command_type == TuyaCommandType::DATAPOINT_REPORT_SYNC) {
+        this->send_command_(
+            TuyaCommand{.cmd = TuyaCommandType::DATAPOINT_REPORT_ACK, .payload = std::vector<uint8_t>{0x01}});
+      }
       break;
     case TuyaCommandType::DATAPOINT_QUERY:
       break;
@@ -423,7 +429,7 @@ void Tuya::send_raw_command_(TuyaCommand command) {
       break;
     case TuyaCommandType::DATAPOINT_DELIVER:
     case TuyaCommandType::DATAPOINT_QUERY:
-      this->expected_response_ = TuyaCommandType::DATAPOINT_REPORT;
+      this->expected_response_ = TuyaCommandType::DATAPOINT_REPORT_ASYNC;
       break;
     default:
       break;
diff --git a/esphome/components/tuya/tuya.h b/esphome/components/tuya/tuya.h
index 6db417d474..76431ddfe4 100644
--- a/esphome/components/tuya/tuya.h
+++ b/esphome/components/tuya/tuya.h
@@ -53,10 +53,12 @@ enum class TuyaCommandType : uint8_t {
   WIFI_RESET = 0x04,
   WIFI_SELECT = 0x05,
   DATAPOINT_DELIVER = 0x06,
-  DATAPOINT_REPORT = 0x07,
+  DATAPOINT_REPORT_ASYNC = 0x07,
   DATAPOINT_QUERY = 0x08,
   WIFI_TEST = 0x0E,
   LOCAL_TIME_QUERY = 0x1C,
+  DATAPOINT_REPORT_SYNC = 0x22,
+  DATAPOINT_REPORT_ACK = 0x23,
   WIFI_RSSI = 0x24,
   VACUUM_MAP_UPLOAD = 0x28,
   GET_NETWORK_STATUS = 0x2B,
diff --git a/esphome/components/uart/__init__.py b/esphome/components/uart/__init__.py
index 088227afe5..0738a127e1 100644
--- a/esphome/components/uart/__init__.py
+++ b/esphome/components/uart/__init__.py
@@ -1,5 +1,5 @@
 from typing import Optional
-
+import re
 import esphome.codegen as cg
 import esphome.config_validation as cv
 import esphome.final_validate as fv
@@ -11,6 +11,7 @@ from esphome.const import (
     CONF_NUMBER,
     CONF_RX_PIN,
     CONF_TX_PIN,
+    CONF_PORT,
     CONF_UART_ID,
     CONF_DATA,
     CONF_RX_BUFFER_SIZE,
@@ -27,6 +28,7 @@ from esphome.const import (
     CONF_DUMMY_RECEIVER,
     CONF_DUMMY_RECEIVER_ID,
     CONF_LAMBDA,
+    PLATFORM_HOST,
 )
 from esphome.core import CORE
 
@@ -45,6 +47,7 @@ RP2040UartComponent = uart_ns.class_("RP2040UartComponent", UARTComponent, cg.Co
 LibreTinyUARTComponent = uart_ns.class_(
     "LibreTinyUARTComponent", UARTComponent, cg.Component
 )
+HostUartComponent = uart_ns.class_("HostUartComponent", UARTComponent, cg.Component)
 
 NATIVE_UART_CLASSES = (
     str(IDFUARTComponent),
@@ -54,6 +57,39 @@ NATIVE_UART_CLASSES = (
     str(LibreTinyUARTComponent),
 )
 
+HOST_BAUD_RATES = [
+    50,
+    75,
+    110,
+    134,
+    150,
+    200,
+    300,
+    600,
+    1200,
+    1800,
+    2400,
+    4800,
+    9600,
+    19200,
+    38400,
+    57600,
+    115200,
+    230400,
+    460800,
+    500000,
+    576000,
+    921600,
+    1000000,
+    1152000,
+    1500000,
+    2000000,
+    2500000,
+    3000000,
+    3500000,
+    4000000,
+]
+
 UARTDevice = uart_ns.class_("UARTDevice")
 UARTWriteAction = uart_ns.class_("UARTWriteAction", automation.Action)
 UARTDebugger = uart_ns.class_("UARTDebugger", cg.Component, automation.Action)
@@ -95,6 +131,20 @@ def validate_invert_esp32(config):
     return config
 
 
+def validate_host_config(config):
+    if CORE.is_host:
+        if CONF_TX_PIN in config or CONF_RX_PIN in config:
+            raise cv.Invalid(
+                "TX and RX pins are not supported for UART on host platform."
+            )
+        if config[CONF_BAUD_RATE] not in HOST_BAUD_RATES:
+            raise cv.Invalid(
+                f"Host platform doesn't support baud rate {config[CONF_BAUD_RATE]}",
+                path=[CONF_BAUD_RATE],
+            )
+    return config
+
+
 def _uart_declare_type(value):
     if CORE.is_esp8266:
         return cv.declare_id(ESP8266UartComponent)(value)
@@ -107,6 +157,8 @@ def _uart_declare_type(value):
         return cv.declare_id(RP2040UartComponent)(value)
     if CORE.is_libretiny:
         return cv.declare_id(LibreTinyUARTComponent)(value)
+    if CORE.is_host:
+        return cv.declare_id(HostUartComponent)(value)
     raise NotImplementedError
 
 
@@ -149,6 +201,12 @@ def maybe_empty_debug(value):
     return DEBUG_SCHEMA(value)
 
 
+def validate_port(value):
+    if not re.match(r"^/(?:[^/]+/)[^/]+$", value):
+        raise cv.Invalid("Port must be a valid device path")
+    return value
+
+
 DEBUG_SCHEMA = cv.Schema(
     {
         cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(UARTDebugger),
@@ -181,6 +239,7 @@ CONFIG_SCHEMA = cv.All(
             cv.Required(CONF_BAUD_RATE): cv.int_range(min=1),
             cv.Optional(CONF_TX_PIN): pins.internal_gpio_output_pin_schema,
             cv.Optional(CONF_RX_PIN): validate_rx_pin,
+            cv.Optional(CONF_PORT): cv.All(validate_port, cv.only_on(PLATFORM_HOST)),
             cv.Optional(CONF_RX_BUFFER_SIZE, default=256): cv.validate_bytes,
             cv.Optional(CONF_STOP_BITS, default=1): cv.one_of(1, 2, int=True),
             cv.Optional(CONF_DATA_BITS, default=8): cv.int_range(min=5, max=8),
@@ -193,8 +252,9 @@ CONFIG_SCHEMA = cv.All(
             cv.Optional(CONF_DEBUG): maybe_empty_debug,
         }
     ).extend(cv.COMPONENT_SCHEMA),
-    cv.has_at_least_one_key(CONF_TX_PIN, CONF_RX_PIN),
+    cv.has_at_least_one_key(CONF_TX_PIN, CONF_RX_PIN, CONF_PORT),
     validate_invert_esp32,
+    validate_host_config,
 )
 
 
@@ -236,6 +296,8 @@ async def to_code(config):
     if CONF_RX_PIN in config:
         rx_pin = await cg.gpio_pin_expression(config[CONF_RX_PIN])
         cg.add(var.set_rx_pin(rx_pin))
+    if CONF_PORT in config:
+        cg.add(var.set_name(config[CONF_PORT]))
     cg.add(var.set_rx_buffer_size(config[CONF_RX_BUFFER_SIZE]))
     cg.add(var.set_stop_bits(config[CONF_STOP_BITS]))
     cg.add(var.set_data_bits(config[CONF_DATA_BITS]))
@@ -258,6 +320,7 @@ KEY_UART_DEVICES = "uart_devices"
 def final_validate_device_schema(
     name: str,
     *,
+    uart_bus: str = CONF_UART_ID,
     baud_rate: Optional[int] = None,
     require_tx: bool = False,
     require_rx: bool = False,
@@ -268,7 +331,7 @@ def final_validate_device_schema(
     def validate_baud_rate(value):
         if value != baud_rate:
             raise cv.Invalid(
-                f"Component {name} requires baud rate {baud_rate} for the uart bus"
+                f"Component {name} requires baud rate {baud_rate} for the uart referenced by {uart_bus}"
             )
         return value
 
@@ -287,21 +350,21 @@ def final_validate_device_schema(
     def validate_data_bits(value):
         if value != data_bits:
             raise cv.Invalid(
-                f"Component {name} requires {data_bits} data bits for the uart bus"
+                f"Component {name} requires {data_bits} data bits for the uart referenced by {uart_bus}"
             )
         return value
 
     def validate_parity(value):
         if value != parity:
             raise cv.Invalid(
-                f"Component {name} requires parity {parity} for the uart bus"
+                f"Component {name} requires parity {parity} for the uart referenced by {uart_bus}"
             )
         return value
 
     def validate_stop_bits(value):
         if value != stop_bits:
             raise cv.Invalid(
-                f"Component {name} requires {stop_bits} stop bits for the uart bus"
+                f"Component {name} requires {stop_bits} stop bits for the uart referenced by {uart_bus}"
             )
         return value
 
@@ -316,14 +379,14 @@ def final_validate_device_schema(
             hub_schema[
                 cv.Required(
                     CONF_TX_PIN,
-                    msg=f"Component {name} requires this uart bus to declare a tx_pin",
+                    msg=f"Component {name} requires uart referenced by {uart_bus} to declare a tx_pin",
                 )
             ] = validate_pin(CONF_TX_PIN, device)
         if require_rx and uart_id_type_str in NATIVE_UART_CLASSES:
             hub_schema[
                 cv.Required(
                     CONF_RX_PIN,
-                    msg=f"Component {name} requires this uart bus to declare a rx_pin",
+                    msg=f"Component {name} requires uart referenced by {uart_bus} to declare a rx_pin",
                 )
             ] = validate_pin(CONF_RX_PIN, device)
         if baud_rate is not None:
@@ -337,7 +400,7 @@ def final_validate_device_schema(
         return cv.Schema(hub_schema, extra=cv.ALLOW_EXTRA)(hub_config)
 
     return cv.Schema(
-        {cv.Required(CONF_UART_ID): fv.id_declaration_match_schema(validate_hub)},
+        {cv.Required(uart_bus): fv.id_declaration_match_schema(validate_hub)},
         extra=cv.ALLOW_EXTRA,
     )
 
diff --git a/esphome/components/uart/uart_component_esp32_arduino.cpp b/esphome/components/uart/uart_component_esp32_arduino.cpp
index f77783e20e..793c1d52f4 100644
--- a/esphome/components/uart/uart_component_esp32_arduino.cpp
+++ b/esphome/components/uart/uart_component_esp32_arduino.cpp
@@ -96,10 +96,24 @@ void ESP32ArduinoUARTComponent::setup() {
     next_uart_num++;
   } else {
 #ifdef USE_LOGGER
-    // The logger doesn't use this UART component, instead it targets the UARTs
-    // directly (i.e. Serial/Serial0, Serial1, and Serial2). If the logger is
-    // enabled, skip the UART that it is configured to use.
-    if (logger::global_logger->get_baud_rate() > 0 && logger::global_logger->get_uart() == next_uart_num) {
+    bool logger_uses_hardware_uart = true;
+
+#ifdef USE_LOGGER_USB_CDC
+    if (logger::global_logger->get_uart() == logger::UART_SELECTION_USB_CDC) {
+      // this is not a hardware UART, ignore it
+      logger_uses_hardware_uart = false;
+    }
+#endif  // USE_LOGGER_USB_CDC
+
+#ifdef USE_LOGGER_USB_SERIAL_JTAG
+    if (logger::global_logger->get_uart() == logger::UART_SELECTION_USB_SERIAL_JTAG) {
+      // this is not a hardware UART, ignore it
+      logger_uses_hardware_uart = false;
+    }
+#endif  // USE_LOGGER_USB_SERIAL_JTAG
+
+    if (logger_uses_hardware_uart && logger::global_logger->get_baud_rate() > 0 &&
+        logger::global_logger->get_uart() == next_uart_num) {
       next_uart_num++;
     }
 #endif  // USE_LOGGER
diff --git a/esphome/components/uart/uart_component_esp_idf.cpp b/esphome/components/uart/uart_component_esp_idf.cpp
index c66753b0c4..6999dfb619 100644
--- a/esphome/components/uart/uart_component_esp_idf.cpp
+++ b/esphome/components/uart/uart_component_esp_idf.cpp
@@ -60,10 +60,30 @@ uart_config_t IDFUARTComponent::get_config_() {
 
 void IDFUARTComponent::setup() {
   static uint8_t next_uart_num = 0;
+
 #ifdef USE_LOGGER
-  if (logger::global_logger->get_uart_num() == next_uart_num)
+  bool logger_uses_hardware_uart = true;
+
+#ifdef USE_LOGGER_USB_CDC
+  if (logger::global_logger->get_uart() == logger::UART_SELECTION_USB_CDC) {
+    // this is not a hardware UART, ignore it
+    logger_uses_hardware_uart = false;
+  }
+#endif  // USE_LOGGER_USB_CDC
+
+#ifdef USE_LOGGER_USB_SERIAL_JTAG
+  if (logger::global_logger->get_uart() == logger::UART_SELECTION_USB_SERIAL_JTAG) {
+    // this is not a hardware UART, ignore it
+    logger_uses_hardware_uart = false;
+  }
+#endif  // USE_LOGGER_USB_SERIAL_JTAG
+
+  if (logger_uses_hardware_uart && logger::global_logger->get_baud_rate() > 0 &&
+      logger::global_logger->get_uart_num() == next_uart_num) {
     next_uart_num++;
-#endif
+  }
+#endif  // USE_LOGGER
+
   if (next_uart_num >= UART_NUM_MAX) {
     ESP_LOGW(TAG, "Maximum number of UART components created already.");
     this->mark_failed();
diff --git a/esphome/components/uart/uart_component_host.cpp b/esphome/components/uart/uart_component_host.cpp
new file mode 100644
index 0000000000..d8d2fd75b8
--- /dev/null
+++ b/esphome/components/uart/uart_component_host.cpp
@@ -0,0 +1,295 @@
+#ifdef USE_HOST
+#include "uart_component_host.h"
+#include "esphome/core/application.h"
+#include "esphome/core/defines.h"
+#include "esphome/core/helpers.h"
+#include "esphome/core/log.h"
+
+#ifndef __linux__
+#error This HostUartComponent implementation is only for Linux
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <termios.h>
+#include <sys/ioctl.h>
+
+#ifdef USE_LOGGER
+#include "esphome/components/logger/logger.h"
+#endif
+
+namespace {
+
+speed_t get_baud(int baud) {
+  switch (baud) {
+    case 50:
+      return B50;
+    case 75:
+      return B75;
+    case 110:
+      return B110;
+    case 134:
+      return B134;
+    case 150:
+      return B150;
+    case 200:
+      return B200;
+    case 300:
+      return B300;
+    case 600:
+      return B600;
+    case 1200:
+      return B1200;
+    case 1800:
+      return B1800;
+    case 2400:
+      return B2400;
+    case 4800:
+      return B4800;
+    case 9600:
+      return B9600;
+    case 19200:
+      return B19200;
+    case 38400:
+      return B38400;
+    case 57600:
+      return B57600;
+    case 115200:
+      return B115200;
+    case 230400:
+      return B230400;
+    case 460800:
+      return B460800;
+    case 500000:
+      return B500000;
+    case 576000:
+      return B576000;
+    case 921600:
+      return B921600;
+    case 1000000:
+      return B1000000;
+    case 1152000:
+      return B1152000;
+    case 1500000:
+      return B1500000;
+    case 2000000:
+      return B2000000;
+    case 2500000:
+      return B2500000;
+    case 3000000:
+      return B3000000;
+    case 3500000:
+      return B3500000;
+    case 4000000:
+      return B4000000;
+    default:
+      return B0;
+  }
+}
+
+}  // namespace
+
+namespace esphome {
+namespace uart {
+
+static const char *const TAG = "uart.host";
+
+HostUartComponent::~HostUartComponent() {
+  if (this->file_descriptor_ != -1) {
+    close(this->file_descriptor_);
+    this->file_descriptor_ = -1;
+  }
+}
+
+void HostUartComponent::setup() {
+  ESP_LOGCONFIG(TAG, "Opening UART port...");
+  speed_t baud = get_baud(this->baud_rate_);
+  if (baud == B0) {
+    ESP_LOGE(TAG, "Unsupported baud rate: %d", this->baud_rate_);
+    this->mark_failed();
+    return;
+  }
+  this->file_descriptor_ = ::open(this->port_name_.c_str(), O_RDWR | O_NOCTTY | O_NDELAY);
+  if (this->file_descriptor_ == -1) {
+    this->update_error_(strerror(errno));
+    this->mark_failed();
+    return;
+  }
+  fcntl(this->file_descriptor_, F_SETFL, 0);
+  struct termios options;
+  tcgetattr(this->file_descriptor_, &options);
+  options.c_cflag &= ~CRTSCTS;
+  options.c_cflag |= CREAD | CLOCAL;
+  options.c_lflag &= ~ICANON;
+  options.c_lflag &= ~ECHO;
+  options.c_lflag &= ~ECHOE;
+  options.c_lflag &= ~ECHONL;
+  options.c_lflag &= ~ISIG;
+  options.c_iflag &= ~(IXON | IXOFF | IXANY);
+  options.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL);
+  options.c_oflag &= ~OPOST;
+  options.c_oflag &= ~ONLCR;
+  // Set data bits
+  options.c_cflag &= ~CSIZE;  // Mask the character size bits
+  switch (this->data_bits_) {
+    case 5:
+      options.c_cflag |= CS5;
+      break;
+    case 6:
+      options.c_cflag |= CS6;
+      break;
+    case 7:
+      options.c_cflag |= CS7;
+      break;
+    case 8:
+    default:
+      options.c_cflag |= CS8;
+      break;
+  }
+  // Set parity
+  switch (this->parity_) {
+    case UART_CONFIG_PARITY_NONE:
+      options.c_cflag &= ~PARENB;
+      break;
+    case UART_CONFIG_PARITY_EVEN:
+      options.c_cflag |= PARENB;
+      options.c_cflag &= ~PARODD;
+      break;
+    case UART_CONFIG_PARITY_ODD:
+      options.c_cflag |= PARENB;
+      options.c_cflag |= PARODD;
+      break;
+  };
+  // Set stop bits
+  if (this->stop_bits_ == 2) {
+    options.c_cflag |= CSTOPB;
+  } else {
+    options.c_cflag &= ~CSTOPB;
+  }
+  cfsetispeed(&options, baud);
+  cfsetospeed(&options, baud);
+  tcsetattr(this->file_descriptor_, TCSANOW, &options);
+}
+
+void HostUartComponent::dump_config() {
+  ESP_LOGCONFIG(TAG, "UART:");
+  ESP_LOGCONFIG(TAG, "  Port: %s", this->port_name_.c_str());
+  if (this->file_descriptor_ == -1) {
+    ESP_LOGCONFIG(TAG, "  Port status: Not opened");
+    if (!this->first_error_.empty()) {
+      ESP_LOGCONFIG(TAG, "  Error: %s", this->first_error_.c_str());
+    }
+    return;
+  }
+  ESP_LOGCONFIG(TAG, "  Port status: opened");
+  ESP_LOGCONFIG(TAG, "  Baud Rate: %d", this->baud_rate_);
+  ESP_LOGCONFIG(TAG, "  Data Bits: %d", this->data_bits_);
+  ESP_LOGCONFIG(TAG, "  Parity: %s",
+                this->parity_ == UART_CONFIG_PARITY_NONE   ? "None"
+                : this->parity_ == UART_CONFIG_PARITY_EVEN ? "Even"
+                                                           : "Odd");
+  ESP_LOGCONFIG(TAG, "  Stop Bits: %d", this->stop_bits_);
+  this->check_logger_conflict();
+}
+
+void HostUartComponent::write_array(const uint8_t *data, size_t len) {
+  if (this->file_descriptor_ == -1) {
+    return;
+  }
+  size_t written = ::write(this->file_descriptor_, data, len);
+  if (written != len) {
+    this->update_error_(strerror(errno));
+    return;
+  }
+#ifdef USE_UART_DEBUGGER
+  for (size_t i = 0; i < len; i++) {
+    this->debug_callback_.call(UART_DIRECTION_TX, data[i]);
+  }
+#endif
+  return;
+}
+
+bool HostUartComponent::peek_byte(uint8_t *data) {
+  if (this->file_descriptor_ == -1) {
+    return false;
+  }
+  if (!this->has_peek_) {
+    if (!this->check_read_timeout_()) {
+      return false;
+    }
+    if (::read(this->file_descriptor_, &this->peek_byte_, 1) != 1) {
+      this->update_error_(strerror(errno));
+      return false;
+    }
+    this->has_peek_ = true;
+  }
+  *data = this->peek_byte_;
+  return true;
+}
+
+bool HostUartComponent::read_array(uint8_t *data, size_t len) {
+  if ((this->file_descriptor_ == -1) || (len == 0)) {
+    return false;
+  }
+  if (!this->check_read_timeout_(len))
+    return false;
+  uint8_t *data_ptr = data;
+  size_t length_to_read = len;
+  if (this->has_peek_) {
+    length_to_read--;
+    *data_ptr = this->peek_byte_;
+    data_ptr++;
+    this->has_peek_ = false;
+  }
+  if (length_to_read > 0) {
+    int sz = ::read(this->file_descriptor_, data_ptr, length_to_read);
+    if (sz == -1) {
+      this->update_error_(strerror(errno));
+      return false;
+    }
+  }
+#ifdef USE_UART_DEBUGGER
+  for (size_t i = 0; i < len; i++) {
+    this->debug_callback_.call(UART_DIRECTION_RX, data[i]);
+  }
+#endif
+  return true;
+}
+
+int HostUartComponent::available() {
+  if (this->file_descriptor_ == -1) {
+    return 0;
+  }
+  int available;
+  int res = ioctl(this->file_descriptor_, FIONREAD, &available);
+  if (res == -1) {
+    this->update_error_(strerror(errno));
+    return 0;
+  }
+  if (this->has_peek_)
+    available++;
+  return available;
+};
+
+void HostUartComponent::flush() {
+  if (this->file_descriptor_ == -1) {
+    return;
+  }
+  tcflush(this->file_descriptor_, TCIOFLUSH);
+  ESP_LOGV(TAG, "    Flushing...");
+}
+
+void HostUartComponent::update_error_(const std::string &error) {
+  if (this->first_error_.empty()) {
+    this->first_error_ = error;
+  }
+  ESP_LOGE(TAG, "Port error: %s", error.c_str());
+}
+
+}  // namespace uart
+}  // namespace esphome
+
+#endif  // USE_HOST
diff --git a/esphome/components/uart/uart_component_host.h b/esphome/components/uart/uart_component_host.h
new file mode 100644
index 0000000000..c1f1dd0d2c
--- /dev/null
+++ b/esphome/components/uart/uart_component_host.h
@@ -0,0 +1,38 @@
+#pragma once
+
+#ifdef USE_HOST
+
+#include "esphome/core/component.h"
+#include "esphome/core/log.h"
+#include "uart_component.h"
+
+namespace esphome {
+namespace uart {
+
+class HostUartComponent : public UARTComponent, public Component {
+ public:
+  virtual ~HostUartComponent();
+  void setup() override;
+  void dump_config() override;
+  float get_setup_priority() const override { return setup_priority::BUS; }
+  void write_array(const uint8_t *data, size_t len) override;
+  bool peek_byte(uint8_t *data) override;
+  bool read_array(uint8_t *data, size_t len) override;
+  int available() override;
+  void flush() override;
+  void set_name(std::string port_name) { port_name_ = port_name; };
+
+ protected:
+  void update_error_(const std::string &error);
+  void check_logger_conflict() override {}
+  std::string port_name_;
+  std::string first_error_{""};
+  int file_descriptor_ = -1;
+  bool has_peek_{false};
+  uint8_t peek_byte_;
+};
+
+}  // namespace uart
+}  // namespace esphome
+
+#endif  // USE_HOST
diff --git a/esphome/components/update/__init__.py b/esphome/components/update/__init__.py
index ea1cf778b6..45bf082fa4 100644
--- a/esphome/components/update/__init__.py
+++ b/esphome/components/update/__init__.py
@@ -4,11 +4,13 @@ import esphome.config_validation as cv
 import esphome.codegen as cg
 from esphome.const import (
     CONF_DEVICE_CLASS,
+    CONF_ENTITY_CATEGORY,
     CONF_ID,
     CONF_MQTT_ID,
     CONF_WEB_SERVER_ID,
     DEVICE_CLASS_EMPTY,
     DEVICE_CLASS_FIRMWARE,
+    ENTITY_CATEGORY_CONFIG,
 )
 from esphome.core import CORE, coroutine_with_priority
 from esphome.cpp_helpers import setup_entity
@@ -41,6 +43,9 @@ UPDATE_SCHEMA = (
             cv.Optional(CONF_ON_UPDATE_AVAILABLE): automation.validate_automation(
                 single=True
             ),
+            cv.Optional(
+                CONF_ENTITY_CATEGORY, default=ENTITY_CATEGORY_CONFIG
+            ): cv.entity_category,
         }
     )
 )
@@ -64,7 +69,7 @@ async def setup_update_core_(var, config):
         await mqtt.register_mqtt_component(mqtt_, config)
 
     if web_server_id_config := config.get(CONF_WEB_SERVER_ID):
-        web_server_ = cg.get_variable(web_server_id_config)
+        web_server_ = await cg.get_variable(web_server_id_config)
         web_server.add_entity_to_sorting_list(web_server_, var, config)
 
 
diff --git a/esphome/components/update/update_entity.cpp b/esphome/components/update/update_entity.cpp
index 501cb6635f..ed9a0480d8 100644
--- a/esphome/components/update/update_entity.cpp
+++ b/esphome/components/update/update_entity.cpp
@@ -1,9 +1,35 @@
 #include "update_entity.h"
 
+#include "esphome/core/log.h"
+
 namespace esphome {
 namespace update {
 
+static const char *const TAG = "update";
+
 void UpdateEntity::publish_state() {
+  ESP_LOGD(TAG, "'%s' - Publishing:", this->name_.c_str());
+  ESP_LOGD(TAG, "  Current Version: %s", this->update_info_.current_version.c_str());
+
+  if (!this->update_info_.md5.empty()) {
+    ESP_LOGD(TAG, "  Latest Version: %s", this->update_info_.latest_version.c_str());
+  }
+  if (!this->update_info_.firmware_url.empty()) {
+    ESP_LOGD(TAG, "  Firmware URL: %s", this->update_info_.firmware_url.c_str());
+  }
+
+  ESP_LOGD(TAG, "  Title: %s", this->update_info_.title.c_str());
+  if (!this->update_info_.summary.empty()) {
+    ESP_LOGD(TAG, "  Summary: %s", this->update_info_.summary.c_str());
+  }
+  if (!this->update_info_.release_url.empty()) {
+    ESP_LOGD(TAG, "  Release URL: %s", this->update_info_.release_url.c_str());
+  }
+
+  if (this->update_info_.has_progress) {
+    ESP_LOGD(TAG, "  Progress: %.0f%%", this->update_info_.progress);
+  }
+
   this->has_state_ = true;
   this->state_callback_.call();
 }
diff --git a/esphome/components/uptime/sensor.py b/esphome/components/uptime/sensor.py
index 07d7d8f2cf..30220751b6 100644
--- a/esphome/components/uptime/sensor.py
+++ b/esphome/components/uptime/sensor.py
@@ -1,7 +1,9 @@
 import esphome.codegen as cg
 import esphome.config_validation as cv
-from esphome.components import sensor
+from esphome.components import sensor, time
 from esphome.const import (
+    CONF_TIME_ID,
+    DEVICE_CLASS_TIMESTAMP,
     ENTITY_CATEGORY_DIAGNOSTIC,
     STATE_CLASS_TOTAL_INCREASING,
     UNIT_SECOND,
@@ -10,19 +12,50 @@ from esphome.const import (
 )
 
 uptime_ns = cg.esphome_ns.namespace("uptime")
-UptimeSensor = uptime_ns.class_("UptimeSensor", sensor.Sensor, cg.PollingComponent)
+UptimeSecondsSensor = uptime_ns.class_(
+    "UptimeSecondsSensor", sensor.Sensor, cg.PollingComponent
+)
+UptimeTimestampSensor = uptime_ns.class_(
+    "UptimeTimestampSensor", sensor.Sensor, cg.Component
+)
 
-CONFIG_SCHEMA = sensor.sensor_schema(
-    UptimeSensor,
-    unit_of_measurement=UNIT_SECOND,
-    icon=ICON_TIMER,
-    accuracy_decimals=0,
-    state_class=STATE_CLASS_TOTAL_INCREASING,
-    device_class=DEVICE_CLASS_DURATION,
-    entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
-).extend(cv.polling_component_schema("60s"))
+
+CONFIG_SCHEMA = cv.typed_schema(
+    {
+        "seconds": sensor.sensor_schema(
+            UptimeSecondsSensor,
+            unit_of_measurement=UNIT_SECOND,
+            icon=ICON_TIMER,
+            accuracy_decimals=0,
+            state_class=STATE_CLASS_TOTAL_INCREASING,
+            device_class=DEVICE_CLASS_DURATION,
+            entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
+        ).extend(cv.polling_component_schema("60s")),
+        "timestamp": sensor.sensor_schema(
+            UptimeTimestampSensor,
+            icon=ICON_TIMER,
+            accuracy_decimals=0,
+            device_class=DEVICE_CLASS_TIMESTAMP,
+            entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
+        )
+        .extend(
+            cv.Schema(
+                {
+                    cv.GenerateID(CONF_TIME_ID): cv.All(
+                        cv.requires_component("time"), cv.use_id(time.RealTimeClock)
+                    ),
+                }
+            )
+        )
+        .extend(cv.COMPONENT_SCHEMA),
+    },
+    default_type="seconds",
+)
 
 
 async def to_code(config):
     var = await sensor.new_sensor(config)
     await cg.register_component(var, config)
+    if time_id_config := config.get(CONF_TIME_ID):
+        time_id = await cg.get_variable(time_id_config)
+        cg.add(var.set_time(time_id))
diff --git a/esphome/components/uptime/uptime_sensor.cpp b/esphome/components/uptime/uptime_seconds_sensor.cpp
similarity index 72%
rename from esphome/components/uptime/uptime_sensor.cpp
rename to esphome/components/uptime/uptime_seconds_sensor.cpp
index 40325d2a36..fa6b9d621d 100644
--- a/esphome/components/uptime/uptime_sensor.cpp
+++ b/esphome/components/uptime/uptime_seconds_sensor.cpp
@@ -1,14 +1,15 @@
-#include "uptime_sensor.h"
-#include "esphome/core/log.h"
-#include "esphome/core/helpers.h"
+#include "uptime_seconds_sensor.h"
+
 #include "esphome/core/hal.h"
+#include "esphome/core/helpers.h"
+#include "esphome/core/log.h"
 
 namespace esphome {
 namespace uptime {
 
 static const char *const TAG = "uptime.sensor";
 
-void UptimeSensor::update() {
+void UptimeSecondsSensor::update() {
   const uint32_t ms = millis();
   const uint64_t ms_mask = (1ULL << 32) - 1ULL;
   const uint32_t last_ms = this->uptime_ & ms_mask;
@@ -26,9 +27,12 @@ void UptimeSensor::update() {
   const float seconds = float(seconds_int) + (this->uptime_ % 1000ULL) / 1000.0f;
   this->publish_state(seconds);
 }
-std::string UptimeSensor::unique_id() { return get_mac_address() + "-uptime"; }
-float UptimeSensor::get_setup_priority() const { return setup_priority::HARDWARE; }
-void UptimeSensor::dump_config() { LOG_SENSOR("", "Uptime Sensor", this); }
+std::string UptimeSecondsSensor::unique_id() { return get_mac_address() + "-uptime"; }
+float UptimeSecondsSensor::get_setup_priority() const { return setup_priority::HARDWARE; }
+void UptimeSecondsSensor::dump_config() {
+  LOG_SENSOR("", "Uptime Sensor", this);
+  ESP_LOGCONFIG(TAG, "  Type: Seconds");
+}
 
 }  // namespace uptime
 }  // namespace esphome
diff --git a/esphome/components/uptime/uptime_sensor.h b/esphome/components/uptime/uptime_seconds_sensor.h
similarity index 82%
rename from esphome/components/uptime/uptime_sensor.h
rename to esphome/components/uptime/uptime_seconds_sensor.h
index dab380d2d9..41b3647822 100644
--- a/esphome/components/uptime/uptime_sensor.h
+++ b/esphome/components/uptime/uptime_seconds_sensor.h
@@ -1,12 +1,12 @@
 #pragma once
 
-#include "esphome/core/component.h"
 #include "esphome/components/sensor/sensor.h"
+#include "esphome/core/component.h"
 
 namespace esphome {
 namespace uptime {
 
-class UptimeSensor : public sensor::Sensor, public PollingComponent {
+class UptimeSecondsSensor : public sensor::Sensor, public PollingComponent {
  public:
   void update() override;
   void dump_config() override;
diff --git a/esphome/components/uptime/uptime_timestamp_sensor.cpp b/esphome/components/uptime/uptime_timestamp_sensor.cpp
new file mode 100644
index 0000000000..fa8cb2bb61
--- /dev/null
+++ b/esphome/components/uptime/uptime_timestamp_sensor.cpp
@@ -0,0 +1,39 @@
+#include "uptime_timestamp_sensor.h"
+
+#ifdef USE_TIME
+
+#include "esphome/core/hal.h"
+#include "esphome/core/helpers.h"
+#include "esphome/core/log.h"
+
+namespace esphome {
+namespace uptime {
+
+static const char *const TAG = "uptime.sensor";
+
+void UptimeTimestampSensor::setup() {
+  this->time_->add_on_time_sync_callback([this]() {
+    if (this->has_state_)
+      return;  // No need to update the timestamp if it's already set
+
+    auto now = this->time_->now();
+    const uint32_t ms = millis();
+    if (!now.is_valid())
+      return;  // No need to update the timestamp if the time is not valid
+
+    time_t timestamp = now.timestamp;
+    uint32_t seconds = ms / 1000;
+    timestamp -= seconds;
+    this->publish_state(timestamp);
+  });
+}
+float UptimeTimestampSensor::get_setup_priority() const { return setup_priority::HARDWARE; }
+void UptimeTimestampSensor::dump_config() {
+  LOG_SENSOR("", "Uptime Sensor", this);
+  ESP_LOGCONFIG(TAG, "  Type: Timestamp");
+}
+
+}  // namespace uptime
+}  // namespace esphome
+
+#endif  // USE_TIME
diff --git a/esphome/components/uptime/uptime_timestamp_sensor.h b/esphome/components/uptime/uptime_timestamp_sensor.h
new file mode 100644
index 0000000000..f38b5d53b4
--- /dev/null
+++ b/esphome/components/uptime/uptime_timestamp_sensor.h
@@ -0,0 +1,30 @@
+#pragma once
+
+#include "esphome/core/defines.h"
+
+#ifdef USE_TIME
+
+#include "esphome/components/sensor/sensor.h"
+#include "esphome/components/time/real_time_clock.h"
+#include "esphome/core/component.h"
+
+namespace esphome {
+namespace uptime {
+
+class UptimeTimestampSensor : public sensor::Sensor, public Component {
+ public:
+  void setup() override;
+  void dump_config() override;
+
+  float get_setup_priority() const override;
+
+  void set_time(time::RealTimeClock *time) { this->time_ = time; }
+
+ protected:
+  time::RealTimeClock *time_;
+};
+
+}  // namespace uptime
+}  // namespace esphome
+
+#endif  // USE_TIME
diff --git a/esphome/components/veml7700/veml7700.cpp b/esphome/components/veml7700/veml7700.cpp
index 68550811a1..a8c1411c68 100644
--- a/esphome/components/veml7700/veml7700.cpp
+++ b/esphome/components/veml7700/veml7700.cpp
@@ -243,7 +243,7 @@ ErrorCode VEML7700Component::configure_() {
   }
 
   PSMRegister psm{0};
-  psm.PSM = PSM::PSM_MODE_1;
+  psm.PSM = PSMMode::PSM_MODE_1;
   psm.PSM_EN = false;
   ESP_LOGV(TAG, "Setting PSM to 0x%04X", psm.raw);
   err = this->write_register((uint8_t) CommandRegisters::PWR_SAVING, psm.raw_bytes, VEML_REG_SIZE);
diff --git a/esphome/components/veml7700/veml7700.h b/esphome/components/veml7700/veml7700.h
index fe5e1158e3..17fee6b851 100644
--- a/esphome/components/veml7700/veml7700.h
+++ b/esphome/components/veml7700/veml7700.h
@@ -24,7 +24,7 @@ enum class CommandRegisters : uint8_t {
   ALS_INT = 0x06      // R: ALS INT trigger event
 };
 
-enum Gain : uint8_t {
+enum Gain : uint16_t {
   X_1 = 0,
   X_2 = 1,
   X_1_8 = 2,
@@ -32,7 +32,7 @@ enum Gain : uint8_t {
 };
 const uint8_t GAINS_COUNT = 4;
 
-enum IntegrationTime : uint8_t {
+enum IntegrationTime : uint16_t {
   INTEGRATION_TIME_25MS = 0b1100,
   INTEGRATION_TIME_50MS = 0b1000,
   INTEGRATION_TIME_100MS = 0b0000,
@@ -42,14 +42,14 @@ enum IntegrationTime : uint8_t {
 };
 const uint8_t INTEGRATION_TIMES_COUNT = 6;
 
-enum Persistence : uint8_t {
+enum Persistence : uint16_t {
   PERSISTENCE_1 = 0,
   PERSISTENCE_2 = 1,
   PERSISTENCE_4 = 2,
   PERSISTENCE_8 = 3,
 };
 
-enum PSM : uint8_t {
+enum PSMMode : uint16_t {
   PSM_MODE_1 = 0,
   PSM_MODE_2 = 1,
   PSM_MODE_3 = 2,
@@ -92,7 +92,7 @@ union PSMRegister {
   uint8_t raw_bytes[2];
   struct {
     bool PSM_EN : 1;
-    uint8_t PSM : 2;
+    PSMMode PSM : 2;
     uint16_t reserved : 13;
   } __attribute__((packed));
 };
diff --git a/esphome/components/voice_assistant/voice_assistant.cpp b/esphome/components/voice_assistant/voice_assistant.cpp
index 1fa8236cf4..e4f388db68 100644
--- a/esphome/components/voice_assistant/voice_assistant.cpp
+++ b/esphome/components/voice_assistant/voice_assistant.cpp
@@ -684,7 +684,9 @@ void VoiceAssistant::on_event(const api::VoiceAssistantEventResponse &msg) {
       this->defer([this, text]() {
         this->tts_start_trigger_->trigger(text);
 #ifdef USE_SPEAKER
-        this->speaker_->start();
+        if (this->speaker_ != nullptr) {
+          this->speaker_->start();
+        }
 #endif
       });
       break;
@@ -799,7 +801,7 @@ void VoiceAssistant::on_audio(const api::VoiceAssistantAudio &msg) {
     this->speaker_buffer_index_ += msg.data.length();
     this->speaker_buffer_size_ += msg.data.length();
     this->speaker_bytes_received_ += msg.data.length();
-    ESP_LOGV(TAG, "Received audio: %" PRId32 " bytes from API", msg.data.length());
+    ESP_LOGV(TAG, "Received audio: %u bytes from API", msg.data.length());
   } else {
     ESP_LOGE(TAG, "Cannot receive audio, buffer is full");
   }
diff --git a/esphome/components/web_server/server_index_v2.h b/esphome/components/web_server/server_index_v2.h
index c942cda592..c9932624ba 100644
--- a/esphome/components/web_server/server_index_v2.h
+++ b/esphome/components/web_server/server_index_v2.h
@@ -68,7 +68,7 @@ const uint8_t INDEX_GZ[] PROGMEM = {
     0xe3, 0x9b, 0x82, 0xde, 0xc5, 0x0e, 0x21, 0xa9, 0x64, 0x54, 0x44, 0x2c, 0x97, 0x29, 0x21, 0x29, 0xc2, 0x3f, 0x90,
     0x45, 0x68, 0xd6, 0x13, 0xec, 0x34, 0x30, 0x9c, 0xcb, 0x40, 0x71, 0x17, 0x3c, 0xe0, 0xc9, 0x9c, 0xa6, 0x82, 0xa6,
     0xc1, 0x5f, 0x71, 0x4a, 0x87, 0x31, 0x40, 0xb1, 0xd3, 0xc4, 0xe3, 0x30, 0x3b, 0x1f, 0x87, 0xc9, 0x88, 0x46, 0xc1,
-    0x8d, 0xc8, 0xf1, 0xdf, 0x89, 0x3b, 0x64, 0x49, 0x18, 0xb3, 0x5f, 0x69, 0xe4, 0x6a, 0x69, 0x70, 0xeb, 0xd0, 0x5b,
+    0x8d, 0xc8, 0xf1, 0xdf, 0x89, 0x3b, 0x64, 0x49, 0x18, 0xb3, 0x5f, 0x69, 0xe4, 0x6a, 0x69, 0x70, 0xe6, 0xd0, 0x5b,
     0x41, 0x93, 0x28, 0x73, 0x9e, 0xbf, 0x7b, 0xf9, 0x42, 0xef, 0x63, 0x45, 0x40, 0xa0, 0x45, 0x36, 0x9b, 0xd2, 0xd4,
     0x43, 0x58, 0x0b, 0x88, 0x67, 0x4c, 0x32, 0xc7, 0x97, 0xe1, 0x54, 0x95, 0xb0, 0xec, 0xfd, 0x34, 0x0a, 0x05, 0x7d,
     0x43, 0x93, 0x88, 0x25, 0x23, 0xb2, 0xd3, 0x54, 0xe5, 0xe3, 0x50, 0x57, 0x44, 0x45, 0xd1, 0xe5, 0xee, 0xb3, 0x58,
@@ -150,19 +150,19 @@ const uint8_t INDEX_GZ[] PROGMEM = {
     0xa6, 0x57, 0xfd, 0xcf, 0xf9, 0x64, 0x0a, 0xda, 0xd8, 0x0a, 0x49, 0x8f, 0xa8, 0x9e, 0xb0, 0xac, 0xcf, 0x37, 0x94,
     0x55, 0xfa, 0xc8, 0xf3, 0x58, 0xa1, 0xa6, 0xc2, 0x5e, 0xde, 0x69, 0xe4, 0xb3, 0xa2, 0xa8, 0x60, 0x1c, 0x9b, 0x9c,
     0x2a, 0xe7, 0xab, 0x2e, 0x19, 0x53, 0xf1, 0xda, 0x63, 0x8a, 0x0f, 0x33, 0xe0, 0x75, 0x16, 0xfb, 0x31, 0xe4, 0x6e,
-    0xef, 0x7f, 0x5e, 0x22, 0x67, 0x91, 0xaf, 0xa0, 0x6f, 0x91, 0xe7, 0xb7, 0xca, 0xc8, 0xc6, 0xb7, 0xdb, 0xad, 0xe1,
-    0xb2, 0x4e, 0x1b, 0x8b, 0xbd, 0x3e, 0xbe, 0x5d, 0x57, 0x1d, 0xc9, 0x62, 0xc2, 0x23, 0x1a, 0xb8, 0x7c, 0x4a, 0x13,
-    0x37, 0x07, 0xaf, 0xaa, 0xde, 0xfb, 0x81, 0xf0, 0x16, 0x6f, 0xab, 0xee, 0xd5, 0xe0, 0x36, 0x07, 0xef, 0xd7, 0xd7,
+    0xef, 0x7f, 0x5e, 0x22, 0x67, 0x91, 0xaf, 0xa0, 0x6f, 0x91, 0xe7, 0x67, 0xca, 0xc8, 0xc6, 0x67, 0xdb, 0xad, 0xe1,
+    0xb2, 0x4e, 0x1b, 0x8b, 0xbd, 0x3e, 0x3e, 0x5b, 0x57, 0x1d, 0xc9, 0x62, 0xc2, 0x23, 0x1a, 0xb8, 0x7c, 0x4a, 0x13,
+    0x37, 0x07, 0xaf, 0xaa, 0xde, 0xfb, 0x81, 0xf0, 0x16, 0x6f, 0xab, 0xee, 0xd5, 0xe0, 0x2c, 0x07, 0xef, 0xd7, 0xd7,
     0xeb, 0x8e, 0xd7, 0xef, 0x69, 0x9a, 0x49, 0x45, 0xb4, 0xd0, 0x69, 0xbf, 0x2e, 0xc5, 0xd2, 0xd7, 0xc1, 0xd6, 0xf6,
     0xa5, 0x09, 0xe2, 0x36, 0xfd, 0x63, 0xff, 0xc0, 0x45, 0xd2, 0x2d, 0xfc, 0x93, 0x3e, 0xf0, 0x1f, 0x8c, 0x5b, 0xf8,
     0x19, 0xf9, 0x50, 0xf5, 0x0a, 0x47, 0x82, 0x3c, 0xeb, 0x3e, 0x33, 0x16, 0x33, 0x8f, 0xd9, 0xe0, 0xce, 0x73, 0x63,
     0x26, 0xea, 0x10, 0x7a, 0x73, 0xf1, 0x42, 0x55, 0x80, 0x4b, 0x51, 0xba, 0xb3, 0x73, 0x63, 0xeb, 0x61, 0x21, 0x88,
     0xbb, 0x1b, 0x33, 0xb1, 0xeb, 0xe2, 0x09, 0xb9, 0x82, 0x1f, 0xbb, 0x0b, 0xef, 0x65, 0x28, 0xc6, 0x7e, 0x1a, 0x26,
-    0x11, 0x9f, 0x78, 0xa8, 0xe6, 0xba, 0xc8, 0xcf, 0xa4, 0xbd, 0xf1, 0x18, 0xe5, 0xbb, 0x57, 0xf8, 0x4c, 0x10, 0xb7,
-    0xeb, 0xd6, 0x26, 0xf8, 0x95, 0x20, 0x57, 0xa7, 0xbb, 0x8b, 0x33, 0x91, 0x77, 0xae, 0xf0, 0x59, 0xe1, 0xb1, 0xc7,
-    0x6f, 0x88, 0x87, 0x48, 0xe7, 0x4c, 0x43, 0x73, 0xce, 0x27, 0xca, 0x73, 0xef, 0x22, 0xfc, 0x1e, 0xe2, 0x2a, 0x69,
-    0xc9, 0x6d, 0x74, 0x68, 0x65, 0x87, 0xb8, 0x5c, 0xba, 0x08, 0xdc, 0xbd, 0x3d, 0xab, 0xac, 0x50, 0x15, 0xf0, 0xad,
-    0x20, 0x15, 0x83, 0x1c, 0xbf, 0x95, 0x11, 0x9a, 0x5b, 0xe1, 0xa5, 0xc8, 0x0c, 0xe3, 0x19, 0x3f, 0xb4, 0x3e, 0x9a,
+    0x11, 0x9f, 0x78, 0xa8, 0xe6, 0xba, 0xc8, 0xcf, 0xa4, 0xbd, 0xf1, 0x18, 0xe5, 0xbb, 0x57, 0xf8, 0x56, 0x10, 0xb7,
+    0xeb, 0xd6, 0x26, 0xf8, 0x95, 0x20, 0x57, 0xa7, 0xbb, 0x8b, 0x5b, 0x91, 0x77, 0xae, 0xf0, 0x6d, 0xe1, 0xb1, 0xc7,
+    0x6f, 0x88, 0x87, 0x48, 0xe7, 0x56, 0x43, 0x73, 0xce, 0x27, 0xca, 0x73, 0xef, 0x22, 0xfc, 0x1e, 0xe2, 0x2a, 0x69,
+    0xc9, 0x6d, 0x74, 0x68, 0x65, 0x87, 0xb8, 0x5c, 0xba, 0x08, 0xdc, 0xbd, 0x3d, 0xab, 0xac, 0x50, 0x15, 0xf0, 0x99,
+    0x20, 0x15, 0x83, 0x1c, 0xbf, 0x95, 0x11, 0x9a, 0x33, 0xe1, 0xa5, 0xc8, 0x0c, 0xe3, 0x19, 0x3f, 0xb4, 0x3e, 0x9a,
     0x69, 0x4f, 0x79, 0x18, 0x7c, 0x26, 0x68, 0x1a, 0x0a, 0x9e, 0xf6, 0x91, 0xad, 0x7e, 0xe0, 0xbf, 0x91, 0xab, 0x9e,
     0xf3, 0x9f, 0xbe, 0xf8, 0x79, 0xf8, 0x73, 0xda, 0xbf, 0xc2, 0xaf, 0xc9, 0xfe, 0xa9, 0xd7, 0x0d, 0xbc, 0x9d, 0x7a,
     0x7d, 0xf9, 0xf3, 0x7e, 0xef, 0x1f, 0x61, 0xfd, 0xd7, 0xb3, 0xfa, 0x4f, 0x7d, 0xb4, 0xf4, 0x7e, 0xde, 0xef, 0xf6,
@@ -177,7 +177,7 @@ const uint8_t INDEX_GZ[] PROGMEM = {
     0xf2, 0x03, 0x64, 0x81, 0xc0, 0xf3, 0x30, 0x9e, 0xd1, 0x2c, 0xa0, 0x39, 0xc2, 0x03, 0x72, 0x21, 0xbc, 0x26, 0xc2,
     0xcf, 0x05, 0xfc, 0x68, 0x21, 0x7c, 0xa1, 0x03, 0x98, 0x70, 0x90, 0x15, 0x51, 0x25, 0x5c, 0x69, 0x2c, 0x2e, 0xc2,
     0xd3, 0x0d, 0x95, 0x62, 0x0c, 0xde, 0x05, 0x84, 0x87, 0x95, 0x70, 0x27, 0xbe, 0x21, 0x86, 0x24, 0xde, 0xa5, 0x94,
-    0xfe, 0x10, 0xc6, 0x1f, 0x69, 0xea, 0x9d, 0xe1, 0x66, 0xeb, 0x31, 0x96, 0x2e, 0xe8, 0x9d, 0x26, 0x6a, 0x17, 0xb1,
+    0xfe, 0x10, 0xc6, 0x1f, 0x69, 0xea, 0xdd, 0xe2, 0x66, 0xeb, 0x31, 0x96, 0x2e, 0xe8, 0x9d, 0x26, 0x6a, 0x17, 0xb1,
     0xaa, 0x73, 0xa1, 0x62, 0x04, 0x20, 0x64, 0xab, 0xbe, 0x18, 0xd8, 0xf1, 0x9d, 0x74, 0xcd, 0x61, 0x95, 0x86, 0x37,
     0x2e, 0xaa, 0xc6, 0x45, 0x59, 0x32, 0x0f, 0x63, 0x16, 0x39, 0x82, 0x4e, 0xa6, 0x71, 0x28, 0xa8, 0xa3, 0xd7, 0xeb,
     0x84, 0x30, 0x90, 0x5b, 0xa8, 0x0c, 0x91, 0x65, 0x70, 0x46, 0x26, 0xe0, 0x04, 0x67, 0xc5, 0x83, 0xe8, 0x94, 0x56,
@@ -220,10 +220,10 @@ const uint8_t INDEX_GZ[] PROGMEM = {
     0x73, 0xd4, 0x69, 0xa0, 0x45, 0xa5, 0xad, 0xd4, 0x99, 0xaa, 0x71, 0xf4, 0x82, 0x4f, 0xcf, 0x49, 0xa3, 0x3d, 0x3f,
     0x1d, 0xb5, 0xe7, 0xb5, 0x1a, 0xca, 0x0c, 0x69, 0xcd, 0x7a, 0xf3, 0x3e, 0x7e, 0x03, 0x4e, 0x3d, 0x9b, 0x96, 0x70,
     0x65, 0x79, 0x2d, 0xbd, 0xbc, 0x5a, 0x2d, 0xc9, 0x51, 0xdb, 0xea, 0x3a, 0x52, 0x5d, 0xf3, 0x5c, 0xe1, 0x64, 0x95,
-    0xd4, 0x4e, 0x90, 0x2c, 0x81, 0x64, 0x28, 0x42, 0xc8, 0x99, 0x40, 0x1b, 0x47, 0x85, 0x31, 0xa1, 0xbb, 0x3c, 0xb3,
+    0xd4, 0x4e, 0x90, 0x2c, 0x81, 0x64, 0x28, 0x42, 0xc8, 0xad, 0x40, 0x1b, 0x47, 0x85, 0x31, 0xa1, 0xbb, 0x3c, 0xb3,
     0xc0, 0x3e, 0x95, 0x94, 0xf0, 0x00, 0x0b, 0xd0, 0xb5, 0xf0, 0x04, 0x4f, 0xf0, 0xac, 0xd6, 0x94, 0x64, 0x5e, 0x6f,
     0xb6, 0xab, 0x63, 0x3d, 0x2a, 0xc7, 0xc2, 0xb3, 0x1a, 0x99, 0x14, 0x58, 0xca, 0x93, 0x5a, 0x2d, 0xaf, 0x06, 0x3b,
-    0xcd, 0xc9, 0xad, 0x04, 0x20, 0xce, 0x56, 0x93, 0x32, 0x8c, 0x84, 0x2d, 0x65, 0x2a, 0xf3, 0x59, 0x92, 0xd0, 0x14,
+    0xcd, 0xc9, 0xad, 0x04, 0x20, 0x6e, 0x57, 0x93, 0x32, 0x8c, 0x84, 0x2d, 0x65, 0x2a, 0xf3, 0x59, 0x92, 0xd0, 0x14,
     0xa4, 0x28, 0x11, 0x98, 0xe5, 0x79, 0x29, 0xd9, 0x41, 0x8c, 0x62, 0x4a, 0x52, 0xe0, 0x3c, 0xd2, 0xee, 0xc2, 0x09,
     0xe6, 0x78, 0x2c, 0xf9, 0x06, 0x21, 0xe4, 0xc2, 0xa4, 0xb3, 0x08, 0xc9, 0x83, 0x62, 0xc2, 0x2c, 0x99, 0x94, 0x11,
     0xea, 0x5f, 0xee, 0x9e, 0xf3, 0x7b, 0x6d, 0xb2, 0x1e, 0xeb, 0x07, 0xb2, 0x59, 0xac, 0x39, 0x57, 0x48, 0xde, 0x7b,
@@ -238,14 +238,14 @@ const uint8_t INDEX_GZ[] PROGMEM = {
     0x13, 0xf3, 0xec, 0xa5, 0x5f, 0xd6, 0xca, 0xc6, 0x97, 0xbb, 0x67, 0xef, 0x37, 0x35, 0x83, 0xf2, 0x7c, 0x56, 0xda,
     0xf8, 0x12, 0xbe, 0x05, 0x8d, 0x83, 0x85, 0x16, 0x0e, 0x01, 0xcb, 0xb1, 0x14, 0x48, 0x41, 0x96, 0x17, 0xae, 0x91,
     0xa7, 0x38, 0x21, 0x32, 0x0c, 0x54, 0xdd, 0x35, 0xad, 0xe6, 0x31, 0x9e, 0x5c, 0x0c, 0xf8, 0x94, 0x6e, 0x89, 0x0d,
-    0x9d, 0x21, 0x9f, 0x4d, 0x20, 0x75, 0x46, 0x82, 0xce, 0xf0, 0x4e, 0x03, 0xb5, 0xab, 0xe2, 0x2b, 0x91, 0x44, 0xca,
+    0xdd, 0x22, 0x9f, 0x4d, 0x20, 0x75, 0x46, 0x82, 0xce, 0xf0, 0x4e, 0x03, 0xb5, 0xab, 0xe2, 0x2b, 0x91, 0x44, 0xca,
     0x2b, 0xb2, 0x05, 0x8f, 0x49, 0x03, 0xc7, 0xa4, 0x81, 0x43, 0x92, 0xf5, 0x1a, 0x4a, 0x40, 0xb4, 0xc3, 0x62, 0x5c,
     0x25, 0x66, 0x20, 0x2b, 0x4c, 0x9f, 0x56, 0x25, 0x80, 0xa3, 0x76, 0x28, 0x7d, 0x8f, 0x52, 0xa6, 0x47, 0x92, 0x2c,
     0xde, 0x7a, 0x1c, 0x73, 0x39, 0xf0, 0x05, 0xbb, 0x8e, 0x21, 0xb1, 0x04, 0x56, 0x85, 0x05, 0x0a, 0x8a, 0xa6, 0x4d,
     0xdd, 0x34, 0xf4, 0xe5, 0x3e, 0x71, 0x1c, 0xfa, 0xc0, 0xb9, 0x71, 0xa8, 0xf3, 0x70, 0xb2, 0xf5, 0x2e, 0xc7, 0x7b,
     0x7b, 0x9e, 0xea, 0xf4, 0x8b, 0xf0, 0xb8, 0xa9, 0x2f, 0x23, 0x77, 0xdf, 0x2b, 0x5e, 0x11, 0x21, 0x09, 0x7f, 0xad,
     0x16, 0xf7, 0x73, 0x08, 0x43, 0x7b, 0x61, 0x15, 0x83, 0x06, 0x78, 0xa9, 0xeb, 0x55, 0x97, 0x5f, 0xab, 0x15, 0x51,
-    0xda, 0x2a, 0xb6, 0xce, 0x70, 0x92, 0xcf, 0xbd, 0x22, 0xf5, 0xa7, 0xb1, 0x96, 0x2f, 0x65, 0x40, 0x40, 0xcc, 0xa6,
+    0xda, 0x2a, 0xb6, 0x6e, 0x71, 0x92, 0xcf, 0xbd, 0x22, 0xf5, 0xa7, 0xb1, 0x96, 0x2f, 0x65, 0x40, 0x40, 0xcc, 0xa6,
     0x59, 0x66, 0x16, 0x63, 0x1d, 0x09, 0x06, 0xed, 0xbe, 0xd1, 0x59, 0x0b, 0x58, 0x66, 0x57, 0xe9, 0x46, 0x86, 0x9d,
     0xb5, 0x50, 0x60, 0x1a, 0x41, 0x54, 0x0a, 0x1a, 0xd5, 0x72, 0x4d, 0xde, 0x6f, 0xd7, 0x73, 0x2e, 0x71, 0x86, 0xb4,
     0x93, 0x4b, 0x42, 0x21, 0x91, 0xd5, 0x2a, 0x90, 0xf2, 0x9c, 0x4c, 0xb7, 0x93, 0xfc, 0x99, 0x45, 0xf2, 0x4f, 0x08,
@@ -268,7 +268,7 @@ const uint8_t INDEX_GZ[] PROGMEM = {
     0x36, 0x44, 0x4d, 0xa5, 0xd4, 0x91, 0x2d, 0x50, 0xd1, 0xc1, 0x9f, 0x7b, 0x4c, 0x2b, 0x6e, 0x26, 0x6e, 0x06, 0x0c,
     0xf8, 0x89, 0xf0, 0x54, 0x30, 0x0a, 0x64, 0x06, 0xf7, 0x67, 0x5e, 0x65, 0xea, 0x36, 0x97, 0xdd, 0xb0, 0x46, 0xdc,
     0xd8, 0x46, 0x13, 0x97, 0x71, 0xbd, 0xf3, 0x92, 0x97, 0x0e, 0x55, 0x06, 0xb5, 0x30, 0x5c, 0xb0, 0x4c, 0x24, 0xb1,
-    0x96, 0x3f, 0x54, 0x49, 0xd1, 0x45, 0x23, 0x4c, 0x25, 0x18, 0xef, 0xe4, 0x1e, 0xd0, 0x1c, 0xfe, 0x2e, 0x6e, 0x85,
+    0x96, 0x3f, 0x54, 0x49, 0xd1, 0x45, 0x23, 0x4c, 0x25, 0x18, 0xef, 0xe4, 0x1e, 0xd0, 0x1c, 0xfe, 0x2e, 0xce, 0x84,
     0xb5, 0xa3, 0xc6, 0x89, 0x2d, 0xe7, 0xb4, 0xa4, 0xfe, 0x5b, 0x48, 0x75, 0x59, 0x3d, 0xf3, 0xcf, 0xa5, 0x2c, 0x64,
     0x38, 0xab, 0x30, 0xf6, 0x44, 0x32, 0x76, 0x04, 0x7a, 0x9a, 0x49, 0xfc, 0xee, 0xea, 0x8c, 0x17, 0xa6, 0xa5, 0x9c,
     0x26, 0xb1, 0x37, 0x45, 0xb4, 0xdc, 0xfa, 0xbd, 0xb2, 0x1b, 0x01, 0x23, 0x90, 0x05, 0x84, 0x35, 0x67, 0x4f, 0x10,
@@ -312,7 +312,7 @@ const uint8_t INDEX_GZ[] PROGMEM = {
     0xf1, 0xb5, 0x7b, 0x78, 0x63, 0x02, 0x1e, 0xb4, 0x87, 0x4d, 0x61, 0x19, 0xdb, 0x99, 0xba, 0x07, 0x64, 0x8f, 0x4f,
     0xb8, 0xd1, 0xdd, 0xaa, 0x56, 0xc6, 0x1b, 0xb0, 0xff, 0x11, 0x1e, 0x9b, 0xcb, 0x71, 0x54, 0x73, 0x60, 0x1a, 0x2c,
     0xf2, 0xc2, 0x29, 0xc0, 0x95, 0xf2, 0x96, 0x22, 0xcc, 0x73, 0x19, 0xe0, 0xfe, 0x16, 0x7f, 0xa7, 0x59, 0xe2, 0xb0,
-    0xe0, 0x38, 0xb7, 0x0f, 0xe5, 0x88, 0x0a, 0xfc, 0x22, 0x7e, 0x0f, 0x74, 0x2c, 0x29, 0x34, 0x37, 0x54, 0xf4, 0x94,
+    0xe0, 0x38, 0x67, 0x0f, 0xe5, 0x88, 0x0a, 0xfc, 0x22, 0x7e, 0x0f, 0x74, 0x2c, 0x29, 0x34, 0x37, 0x54, 0xf4, 0x94,
     0xeb, 0x85, 0x6c, 0x4d, 0x4b, 0xc5, 0xb4, 0x48, 0xa9, 0x91, 0xd3, 0x6c, 0xc8, 0xe3, 0x34, 0x56, 0xb6, 0x28, 0x4e,
     0x55, 0x65, 0x5e, 0xb4, 0x05, 0x8b, 0x65, 0x68, 0x71, 0xb9, 0xf4, 0xaa, 0xa8, 0x26, 0xcc, 0x8a, 0x64, 0x20, 0xcc,
     0xac, 0x8c, 0x8a, 0x8a, 0x66, 0xad, 0xfa, 0x78, 0x68, 0x35, 0xa1, 0xc8, 0xe8, 0xe6, 0x15, 0x38, 0x6c, 0x17, 0x82,
@@ -612,31 +612,32 @@ const uint8_t INDEX_GZ[] PROGMEM = {
     0xde, 0x0b, 0x3e, 0xda, 0x3c, 0x56, 0xcc, 0x47, 0x5d, 0x79, 0x05, 0x42, 0xdd, 0xb5, 0x35, 0xca, 0x2f, 0x8f, 0xdd,
     0xce, 0xa9, 0x56, 0x06, 0x1c, 0x19, 0x0e, 0x77, 0x8f, 0x1a, 0xe6, 0x56, 0x45, 0xcc, 0x47, 0x70, 0x20, 0x55, 0x17,
     0x6b, 0x92, 0x8a, 0xc7, 0x7d, 0xdc, 0xec, 0x9c, 0x86, 0x8e, 0xe4, 0x2d, 0x92, 0x79, 0x64, 0xc1, 0x3e, 0x74, 0x1e,
-    0xf3, 0x09, 0xf5, 0x19, 0xdf, 0xbf, 0xa1, 0xd7, 0xf5, 0x70, 0xca, 0x4a, 0xf7, 0x36, 0x28, 0x1d, 0xc5, 0x94, 0xbc,
-    0x9c, 0x09, 0x7e, 0x86, 0x2b, 0x8b, 0x94, 0x2c, 0x3c, 0xd7, 0xbe, 0x73, 0xb0, 0x55, 0x80, 0x84, 0x5c, 0x47, 0x71,
-    0x78, 0xe3, 0x63, 0xd7, 0xb2, 0x37, 0x77, 0x3b, 0xff, 0xfa, 0x3f, 0xfe, 0x97, 0x76, 0x9b, 0x9f, 0xee, 0x8f, 0x9b,
-    0x66, 0xac, 0x15, 0x44, 0xe7, 0xa7, 0x70, 0x11, 0xb1, 0x8c, 0xf3, 0xd2, 0xdb, 0xfa, 0x28, 0x65, 0x51, 0x7d, 0x1c,
-    0xc6, 0x43, 0xb7, 0xb3, 0x1d, 0x41, 0xf6, 0x0d, 0x24, 0x0d, 0x75, 0xb5, 0x08, 0x48, 0xf0, 0x37, 0xdd, 0xa1, 0x31,
-    0x57, 0x31, 0xe4, 0x69, 0xb5, 0x6f, 0xd4, 0x94, 0x07, 0xaa, 0x72, 0xab, 0x26, 0xd5, 0x5f, 0xaf, 0xd2, 0x4c, 0x2d,
-    0xad, 0x5c, 0xa6, 0xc9, 0x5d, 0xa7, 0x88, 0x53, 0xfd, 0xdf, 0xff, 0xf9, 0x5f, 0xfe, 0x9b, 0x79, 0x84, 0xf0, 0xd3,
-    0xbf, 0xfe, 0xf7, 0xff, 0xfc, 0x7f, 0xfe, 0xf7, 0x7f, 0x85, 0x0b, 0x18, 0x3a, 0x44, 0x25, 0xf9, 0x84, 0x53, 0xc6,
-    0xa7, 0x14, 0xc3, 0x70, 0x20, 0x47, 0x71, 0xc2, 0x32, 0xc1, 0x06, 0xd5, 0xeb, 0x35, 0x17, 0x72, 0x42, 0x79, 0xd8,
-    0x34, 0x74, 0xf2, 0xd0, 0xe6, 0x25, 0x8d, 0x54, 0x50, 0x2e, 0x69, 0x31, 0x3f, 0xdd, 0x07, 0x7c, 0x3f, 0xec, 0x46,
-    0xa2, 0x5f, 0x6c, 0xc7, 0xc2, 0x38, 0x65, 0xa1, 0x24, 0x2f, 0xcb, 0x1d, 0x08, 0x97, 0x2c, 0xe0, 0x31, 0x68, 0x59,
-    0xc5, 0x72, 0xf7, 0x2a, 0x7d, 0xda, 0x1f, 0x66, 0x99, 0x60, 0x43, 0x40, 0xb9, 0x72, 0xfd, 0xca, 0xc8, 0x74, 0x1d,
-    0xd4, 0xbf, 0xf8, 0x2e, 0x97, 0xa3, 0x28, 0xdb, 0xfa, 0xf0, 0xe4, 0x4f, 0xf9, 0x5f, 0x26, 0xa0, 0x64, 0x39, 0xde,
-    0x24, 0xbc, 0xd5, 0x16, 0xf7, 0x71, 0xa3, 0x31, 0xbd, 0x45, 0x8b, 0x72, 0x06, 0xbc, 0x6d, 0x32, 0xe9, 0x2e, 0xb6,
-    0x07, 0x94, 0x21, 0xed, 0xc2, 0x33, 0xdd, 0x70, 0xc0, 0xbd, 0xed, 0x34, 0xf2, 0xfc, 0xcf, 0x0b, 0xe9, 0x1c, 0x65,
-    0xbf, 0x42, 0xe8, 0x59, 0xfb, 0x91, 0xaf, 0xb9, 0xbd, 0xb8, 0x85, 0xd5, 0xab, 0xa5, 0x7a, 0x8d, 0x9b, 0xeb, 0x17,
-    0xed, 0xec, 0xd0, 0xb9, 0x1d, 0xf4, 0x3e, 0x84, 0x30, 0xf6, 0xb8, 0x89, 0xc7, 0xad, 0x45, 0x31, 0xbc, 0x10, 0x7c,
-    0x62, 0xc7, 0xca, 0x69, 0x48, 0x07, 0x74, 0x68, 0xfc, 0xef, 0xba, 0x5e, 0xc5, 0xc1, 0xf3, 0xf1, 0xc1, 0x86, 0xb9,
-    0x34, 0x48, 0x32, 0x46, 0xee, 0x34, 0xf2, 0x2f, 0xe1, 0x04, 0x2e, 0x86, 0x31, 0x0f, 0x45, 0x20, 0x09, 0xb6, 0x6d,
-    0x47, 0xdc, 0x43, 0x60, 0x33, 0x7c, 0x61, 0xc1, 0xd3, 0x56, 0x4d, 0xc1, 0x13, 0x5e, 0xbd, 0x0e, 0x99, 0xfb, 0xb2,
-    0xbb, 0x3d, 0x94, 0x72, 0xa4, 0x7d, 0xaf, 0x03, 0xd9, 0xaf, 0x2a, 0x1e, 0x28, 0x2d, 0x63, 0x5a, 0x68, 0x73, 0xbd,
-    0x12, 0xd5, 0xaa, 0xf6, 0x27, 0xe1, 0xb9, 0x12, 0x4c, 0x77, 0xb5, 0x95, 0x2c, 0x84, 0x56, 0xaf, 0xc8, 0xf7, 0x85,
-    0x15, 0x14, 0x4e, 0xa7, 0xb2, 0x21, 0x6a, 0x9f, 0xee, 0x2b, 0xe5, 0x15, 0xb8, 0x87, 0xcc, 0xd2, 0x50, 0x49, 0x11,
-    0xba, 0x91, 0x3e, 0x0a, 0xea, 0x97, 0x4e, 0x97, 0x80, 0xcf, 0x9a, 0x75, 0xfe, 0x1f, 0xd6, 0xb2, 0x30, 0xa4, 0x67,
-    0x88, 0x00, 0x00};
+    0xf3, 0x09, 0xf5, 0x19, 0xdf, 0xbf, 0xa1, 0xd7, 0xf5, 0x70, 0xca, 0x4a, 0xf7, 0x36, 0x28, 0x1d, 0xc5, 0x94, 0xdc,
+    0x78, 0xc4, 0xf5, 0x9d, 0xa3, 0x56, 0xe9, 0x6e, 0x3b, 0x04, 0x9b, 0xc7, 0xb8, 0xe6, 0xa4, 0x4f, 0xce, 0x02, 0x8b,
+    0x77, 0x4e, 0xf7, 0xc3, 0x15, 0x8c, 0x48, 0x7e, 0x9f, 0x6b, 0x47, 0x3b, 0x18, 0x36, 0x40, 0x6f, 0xae, 0xa3, 0xc4,
+    0x81, 0x71, 0xc8, 0x6b, 0x41, 0x9d, 0xbb, 0x9d, 0x7f, 0xfd, 0x1f, 0xff, 0x4b, 0xfb, 0xd8, 0x4f, 0xf7, 0xc7, 0x4d,
+    0x33, 0xd6, 0xca, 0xae, 0xe4, 0xa7, 0x70, 0x6b, 0xb1, 0x0c, 0x0a, 0xd3, 0xdb, 0xfa, 0x28, 0x65, 0x51, 0x7d, 0x1c,
+    0xc6, 0x43, 0xb7, 0xb3, 0x1d, 0x9b, 0xf6, 0x75, 0x25, 0x0d, 0x75, 0xb5, 0x08, 0xe8, 0xf5, 0x37, 0x5d, 0xb8, 0x31,
+    0xf7, 0x36, 0xe4, 0xd1, 0xb6, 0xaf, 0xdf, 0x94, 0xa7, 0xaf, 0x72, 0x05, 0x27, 0xd5, 0x9f, 0xba, 0xd2, 0x1c, 0x30,
+    0xad, 0xdc, 0xbc, 0xc9, 0x5d, 0xa7, 0x08, 0x6a, 0xfd, 0xdf, 0xff, 0xf9, 0x5f, 0xfe, 0x9b, 0x79, 0x84, 0x58, 0xd5,
+    0xbf, 0xfe, 0xf7, 0xff, 0xfc, 0x7f, 0xfe, 0xf7, 0x7f, 0x85, 0xdb, 0x1a, 0x3a, 0x9e, 0x25, 0x99, 0x8a, 0x53, 0x06,
+    0xb3, 0x14, 0x77, 0x71, 0x20, 0xa1, 0x71, 0xc2, 0x32, 0xc1, 0x06, 0xd5, 0xbb, 0x38, 0x17, 0x72, 0x42, 0x79, 0x32,
+    0x35, 0x74, 0xf2, 0x84, 0xe7, 0x25, 0x41, 0x55, 0x50, 0x2e, 0x09, 0x37, 0x3f, 0xdd, 0x07, 0x7c, 0x3f, 0xec, 0xfa,
+    0xa2, 0x5f, 0x6c, 0xc7, 0xc2, 0x90, 0x09, 0x94, 0xe4, 0x65, 0xb9, 0x03, 0xb1, 0x95, 0x05, 0x3c, 0x06, 0x2d, 0xab,
+    0x58, 0xee, 0x5e, 0xa5, 0x4f, 0xfb, 0xc3, 0x2c, 0x13, 0x6c, 0x08, 0x28, 0x57, 0x7e, 0x62, 0x19, 0xc6, 0xae, 0x83,
+    0xae, 0x18, 0xdf, 0xe5, 0x72, 0x14, 0x45, 0xa0, 0x87, 0x27, 0x7f, 0xca, 0xff, 0x32, 0x01, 0x8d, 0xcc, 0xf1, 0x26,
+    0xe1, 0xad, 0x36, 0xcf, 0x8f, 0x1b, 0x8d, 0xe9, 0x2d, 0x5a, 0x94, 0x33, 0xe0, 0x6d, 0x93, 0x49, 0x3a, 0xb6, 0x07,
+    0x94, 0xf1, 0xef, 0xc2, 0x8d, 0xdd, 0x70, 0xc0, 0x17, 0xee, 0x34, 0xf2, 0xfc, 0xcf, 0x0b, 0xe9, 0x49, 0x65, 0xbf,
+    0x42, 0x9c, 0x5a, 0x3b, 0x9d, 0xaf, 0xb9, 0xbd, 0xb8, 0x85, 0xd5, 0xab, 0xa5, 0x7a, 0x8d, 0x9b, 0xeb, 0xb7, 0xf2,
+    0xec, 0x38, 0xbb, 0x1d, 0x21, 0x3f, 0x84, 0x98, 0xf7, 0xb8, 0x89, 0xc7, 0xad, 0x45, 0x31, 0xbc, 0x10, 0x7c, 0x62,
+    0x07, 0xd6, 0x69, 0x48, 0x07, 0x74, 0x68, 0x9c, 0xf5, 0xba, 0x5e, 0x05, 0xcd, 0xf3, 0xf1, 0xc1, 0x86, 0xb9, 0x34,
+    0x48, 0x32, 0xa0, 0xee, 0x34, 0xf2, 0x2f, 0xe1, 0x04, 0x2e, 0x86, 0x31, 0x0f, 0x45, 0x20, 0x09, 0xb6, 0x6d, 0x87,
+    0xe7, 0x43, 0xe0, 0x49, 0x7c, 0x61, 0xc1, 0xd3, 0x56, 0x4d, 0xc1, 0x6d, 0x5e, 0xbd, 0x3b, 0x99, 0xfb, 0xb2, 0xbb,
+    0x3d, 0x94, 0xf2, 0xba, 0x7d, 0xaf, 0xa3, 0xde, 0xaf, 0x2a, 0xee, 0x2a, 0x2d, 0x90, 0x5a, 0x68, 0x73, 0xbd, 0x92,
+    0xeb, 0xaa, 0xf6, 0x27, 0xe1, 0xb9, 0x12, 0x4c, 0x77, 0xb5, 0x95, 0x2c, 0x84, 0x56, 0xaf, 0xc8, 0xf7, 0x85, 0xc9,
+    0x14, 0x4e, 0xa7, 0xb2, 0x21, 0x6a, 0x9f, 0xee, 0x2b, 0x4d, 0x17, 0xb8, 0x87, 0x4c, 0xe9, 0x50, 0x19, 0x14, 0xba,
+    0x91, 0x3e, 0x0a, 0xea, 0x97, 0xce, 0xad, 0x80, 0x6f, 0xa0, 0x75, 0xfe, 0x1f, 0xa2, 0x48, 0xf6, 0xdd, 0x94, 0x88,
+    0x00, 0x00};
 
 }  // namespace web_server
 }  // namespace esphome
diff --git a/esphome/components/web_server/server_index_v3.h b/esphome/components/web_server/server_index_v3.h
index bde1ce1fb5..0c16ea9f37 100644
--- a/esphome/components/web_server/server_index_v3.h
+++ b/esphome/components/web_server/server_index_v3.h
@@ -3632,373 +3632,374 @@ const uint8_t INDEX_GZ[] PROGMEM = {
     0xe7, 0xec, 0xd8, 0x98, 0x31, 0x94, 0x4f, 0x43, 0x40, 0x9e, 0xd0, 0xf7, 0x01, 0xcd, 0x25, 0x67, 0x23, 0xad, 0x2b,
     0xfb, 0x10, 0x17, 0x97, 0xdc, 0x84, 0x6a, 0x31, 0x6f, 0x2b, 0x3d, 0x2a, 0xc4, 0x1b, 0x16, 0x80, 0x65, 0xe9, 0x69,
     0x93, 0x82, 0x6c, 0x94, 0x54, 0x45, 0xfe, 0x13, 0xbf, 0x03, 0xae, 0xad, 0xac, 0xe4, 0x0a, 0x78, 0xf5, 0xff, 0xd3,
-    0xdc, 0x93, 0x2e, 0xb7, 0x6d, 0x24, 0xfd, 0x3f, 0x4f, 0x01, 0xc3, 0x5e, 0x87, 0xb0, 0x01, 0x08, 0x00, 0x45, 0x89,
-    0x26, 0x45, 0x69, 0x13, 0x1f, 0xb5, 0x4e, 0x29, 0x71, 0xca, 0x56, 0x5c, 0xbb, 0x51, 0x54, 0x22, 0x48, 0x0e, 0x49,
-    0xac, 0x41, 0x80, 0x05, 0x80, 0x3a, 0x42, 0x63, 0x9f, 0x65, 0x9f, 0x65, 0x9f, 0xec, 0xab, 0xee, 0x9e, 0x19, 0x0c,
-    0x0e, 0x1e, 0x8a, 0x9d, 0xdd, 0xaf, 0x12, 0xdb, 0xc4, 0xdc, 0xd3, 0x33, 0xd3, 0xd3, 0xd3, 0xa7, 0x3f, 0xe3, 0xbc,
-    0x17, 0xb3, 0xc5, 0xf6, 0xeb, 0xee, 0xf3, 0x67, 0x66, 0xe3, 0x96, 0x04, 0x82, 0xcf, 0xce, 0xe2, 0xd9, 0x2c, 0x64,
-    0x2d, 0x5d, 0x04, 0x0f, 0xd1, 0x4d, 0xd9, 0xcd, 0xd9, 0x23, 0x47, 0x78, 0xec, 0x34, 0xf2, 0x4d, 0x47, 0x4b, 0xcc,
-    0x98, 0x49, 0x97, 0x76, 0x44, 0xb9, 0x22, 0x6f, 0xf6, 0x06, 0xc5, 0x1b, 0x7c, 0x5d, 0x8a, 0xa3, 0x6b, 0x4d, 0xe2,
-    0xd5, 0x28, 0x64, 0x16, 0x6e, 0x77, 0xe8, 0x72, 0x3d, 0x5a, 0x8d, 0x46, 0x10, 0xa5, 0xe5, 0x91, 0x63, 0x82, 0xdf,
-    0x99, 0x38, 0xc5, 0xf7, 0x60, 0x6e, 0xf4, 0x61, 0x52, 0x76, 0x56, 0x1d, 0x3e, 0xe8, 0x8a, 0x00, 0xab, 0x87, 0x3a,
-    0xc8, 0xe0, 0xed, 0xd7, 0x70, 0x6a, 0x07, 0xfa, 0x07, 0xd8, 0x7d, 0xa9, 0xde, 0x6f, 0x3a, 0xfa, 0x83, 0x4b, 0xfd,
-    0x03, 0xc2, 0x18, 0xa3, 0x17, 0xbf, 0xa4, 0xdd, 0xab, 0x9b, 0x3a, 0x09, 0xbd, 0x57, 0x18, 0xc7, 0x00, 0x98, 0xbe,
-    0xaf, 0x02, 0x7f, 0x16, 0xc5, 0x69, 0x16, 0x8c, 0xf5, 0xab, 0xfe, 0xdb, 0xa0, 0x75, 0xb9, 0xc8, 0x5a, 0xc6, 0x95,
-    0x39, 0xce, 0xd4, 0x10, 0x28, 0x02, 0x61, 0x62, 0x04, 0x94, 0x4d, 0x85, 0xd4, 0x13, 0xb4, 0xb5, 0xa0, 0x40, 0xcd,
-    0x58, 0x68, 0x9c, 0x0d, 0xa0, 0x5c, 0x25, 0x9e, 0x0a, 0x06, 0x86, 0xd2, 0xb1, 0xa6, 0xd1, 0xa7, 0x97, 0xca, 0xcb,
-    0xd5, 0x1a, 0xaf, 0xf2, 0xac, 0xb8, 0x2d, 0xd1, 0x07, 0xb0, 0x30, 0x9c, 0xa1, 0xef, 0x47, 0xaa, 0xd2, 0x67, 0xe9,
-    0xde, 0x1d, 0x7e, 0x57, 0xa6, 0x0b, 0xe0, 0xfe, 0x06, 0x8d, 0x8b, 0x28, 0xce, 0x34, 0x70, 0x6c, 0x03, 0x3d, 0x0e,
-    0xab, 0x4a, 0x62, 0xbc, 0xd5, 0x96, 0x91, 0x73, 0x64, 0xf0, 0x3d, 0x5e, 0x7e, 0x2d, 0xee, 0xde, 0xac, 0xe4, 0xc1,
-    0x82, 0x1e, 0x0b, 0x11, 0x2c, 0x60, 0x16, 0x9f, 0xc7, 0xb7, 0x55, 0x39, 0xc8, 0xcb, 0xe1, 0xee, 0xbb, 0xb7, 0x25,
-    0xc8, 0x64, 0x11, 0xd5, 0xaf, 0xc5, 0x03, 0x93, 0x0a, 0x42, 0xa7, 0x72, 0xa6, 0x50, 0xf1, 0x43, 0xd0, 0x30, 0x19,
-    0xe8, 0x89, 0xe1, 0x5d, 0x00, 0x28, 0x89, 0x5f, 0xd3, 0xc3, 0xfc, 0x5a, 0x84, 0x4e, 0x16, 0x81, 0x8b, 0x95, 0xcb,
-    0x19, 0xb0, 0x6b, 0xb4, 0x5c, 0x65, 0xe8, 0x6a, 0x17, 0x06, 0xc0, 0x72, 0x5d, 0x43, 0xd7, 0x9d, 0x80, 0xa5, 0x0b,
-    0x32, 0x31, 0xd7, 0xb5, 0x60, 0x52, 0x4f, 0xe3, 0x44, 0x2f, 0x20, 0x2f, 0xc4, 0xef, 0xc8, 0xa8, 0x82, 0xcf, 0x84,
-    0x4f, 0x63, 0x6c, 0x16, 0x7e, 0xea, 0x5b, 0x63, 0x14, 0xe8, 0x34, 0x60, 0x86, 0x31, 0xb5, 0xd3, 0x6f, 0x85, 0x8d,
-    0x93, 0x05, 0xf7, 0x9b, 0xa5, 0x69, 0x0e, 0x9f, 0xac, 0xa3, 0xfc, 0xec, 0xc9, 0x3a, 0xcd, 0x07, 0x4f, 0xd6, 0xbe,
-    0xd4, 0x15, 0xd0, 0x2f, 0x74, 0x52, 0x14, 0x18, 0x22, 0x18, 0x86, 0xf9, 0x75, 0x61, 0xb9, 0x53, 0xcc, 0x17, 0x76,
-    0x19, 0xa5, 0x6b, 0x28, 0xba, 0x1f, 0x70, 0x01, 0xfd, 0x32, 0x09, 0x16, 0x7e, 0x72, 0x4f, 0xf2, 0x7c, 0x53, 0x15,
-    0xfa, 0x1b, 0xba, 0x46, 0x88, 0x9e, 0x00, 0x40, 0x38, 0x5f, 0xd7, 0xfe, 0x2a, 0xd3, 0x18, 0x9f, 0xad, 0x14, 0x6a,
-    0x42, 0x5f, 0xd7, 0xfa, 0x73, 0x66, 0x4f, 0x58, 0xe6, 0x07, 0x21, 0x55, 0xe9, 0x8b, 0x68, 0xf5, 0xb5, 0xe9, 0xa5,
-    0xe5, 0xe9, 0x45, 0xe5, 0xfd, 0x83, 0x93, 0xa1, 0x2b, 0x80, 0xc6, 0x8d, 0x33, 0xc3, 0x28, 0x56, 0xcd, 0x2b, 0x4a,
-    0x79, 0xff, 0xd5, 0xe5, 0x60, 0xb0, 0x1c, 0x11, 0x2c, 0x07, 0x8b, 0xc6, 0xf1, 0x84, 0xfd, 0xf2, 0xfe, 0xad, 0x0c,
-    0x9b, 0x05, 0x1c, 0xa0, 0x21, 0xdf, 0x98, 0x29, 0xd2, 0x0f, 0x09, 0xd2, 0x0e, 0x14, 0xe0, 0x4a, 0x93, 0x5b, 0x28,
-    0xc9, 0x75, 0xed, 0x8c, 0xc6, 0xce, 0x26, 0x34, 0xea, 0x41, 0x8c, 0xb5, 0x92, 0xfc, 0xe4, 0x80, 0x4a, 0xd3, 0x6d,
-    0x47, 0x85, 0x00, 0x0c, 0x09, 0xcc, 0xb0, 0x80, 0x02, 0x44, 0xf8, 0x1c, 0xb8, 0xc5, 0x83, 0xc2, 0x5e, 0x20, 0x9f,
-    0xdd, 0x3d, 0x2b, 0x93, 0x2a, 0x58, 0x4b, 0x3f, 0x3d, 0xc1, 0x98, 0x5d, 0x70, 0x5f, 0x83, 0x97, 0x8f, 0x93, 0x03,
-    0xfa, 0xd4, 0x2a, 0x27, 0xa2, 0x68, 0x44, 0x3c, 0xed, 0x7a, 0xbc, 0x81, 0x07, 0x1d, 0x15, 0x08, 0x11, 0x0f, 0xa9,
-    0x7e, 0xae, 0x6b, 0x0b, 0x4e, 0x1a, 0x71, 0x77, 0x42, 0xe0, 0x6b, 0xc0, 0x81, 0xb3, 0xab, 0x6b, 0x0b, 0xff, 0x0e,
-    0x67, 0x2e, 0x72, 0xfc, 0xbb, 0x96, 0xcb, 0xb3, 0x8a, 0xb3, 0x96, 0x96, 0xcf, 0xda, 0x98, 0x2f, 0x2e, 0x18, 0x12,
-    0xc8, 0x97, 0xf5, 0x1c, 0x05, 0xb4, 0x0d, 0x8b, 0x3b, 0x17, 0x8b, 0x3b, 0xd9, 0xb0, 0xb8, 0x93, 0x2d, 0x8b, 0x1b,
-    0xf2, 0x85, 0xd4, 0x24, 0xe8, 0x12, 0x34, 0x0e, 0x93, 0xc0, 0xe3, 0x84, 0x46, 0x8f, 0x9f, 0x33, 0x84, 0x93, 0x95,
-    0x86, 0xa0, 0x1c, 0xb5, 0x01, 0x56, 0x4d, 0x70, 0x51, 0x00, 0x51, 0x9f, 0xb8, 0x3c, 0x75, 0x62, 0xde, 0x10, 0x83,
-    0xb3, 0x15, 0x56, 0xe7, 0x0b, 0xbb, 0x94, 0xe2, 0x8b, 0xb7, 0xe6, 0x1b, 0x66, 0x3a, 0xdf, 0x32, 0xd3, 0x71, 0xe9,
-    0xe8, 0xf2, 0x69, 0xd3, 0x21, 0x54, 0x27, 0x05, 0x7b, 0x10, 0x14, 0x46, 0x71, 0xcb, 0x94, 0xf7, 0xe1, 0x66, 0x1c,
-    0xab, 0xec, 0xa8, 0xa5, 0x9f, 0xa6, 0xb7, 0x71, 0x02, 0x12, 0x17, 0x68, 0xe6, 0x61, 0x5b, 0x6a, 0x11, 0x44, 0xdc,
-    0x99, 0xcb, 0xc6, 0xcd, 0x54, 0xe4, 0xab, 0x5b, 0xca, 0xeb, 0x74, 0xa8, 0xc4, 0xd2, 0xcf, 0x32, 0x96, 0x20, 0xd0,
-    0x7d, 0xf0, 0xfa, 0xfd, 0xff, 0x64, 0x9b, 0x35, 0xe0, 0x90, 0x50, 0xc1, 0xea, 0x88, 0xa1, 0x97, 0x40, 0x5b, 0x25,
-    0xe2, 0x22, 0x56, 0x1c, 0xc3, 0x25, 0x12, 0xf0, 0x3f, 0xe1, 0x71, 0x6d, 0x25, 0x8a, 0xe9, 0x92, 0x7b, 0x64, 0xd8,
-    0x4b, 0x7f, 0xf2, 0x01, 0x04, 0x7b, 0x2d, 0xcf, 0x04, 0x25, 0x5d, 0xd5, 0x0d, 0x5c, 0x42, 0xc4, 0xde, 0xb8, 0x40,
-    0x92, 0x88, 0x25, 0xb9, 0x0a, 0x14, 0x58, 0x4f, 0xfa, 0xd6, 0xf4, 0x6a, 0xed, 0xe5, 0x07, 0xb3, 0xc0, 0xa8, 0x61,
-    0x4d, 0x40, 0x6d, 0xe1, 0xe0, 0x54, 0xbe, 0xb9, 0x42, 0xd3, 0x3d, 0x32, 0x80, 0xf3, 0x7b, 0x09, 0xf1, 0x4c, 0x1d,
-    0xf1, 0xa0, 0x1d, 0x26, 0x70, 0x6b, 0x5d, 0x3a, 0x57, 0xf9, 0xd3, 0x19, 0xfe, 0x72, 0xaf, 0xf2, 0xa7, 0x23, 0xfc,
-    0xe5, 0x5d, 0x61, 0xe4, 0xba, 0x86, 0x87, 0xbc, 0x32, 0x67, 0xfd, 0xb4, 0xb4, 0x9f, 0x48, 0xff, 0xec, 0x01, 0xdb,
-    0x86, 0x2f, 0xf0, 0xe3, 0x27, 0xeb, 0x14, 0x2c, 0x2e, 0xd5, 0x39, 0x44, 0x76, 0x62, 0xe4, 0x8d, 0xe9, 0xb3, 0x0d,
-    0xe9, 0x23, 0xe3, 0xbf, 0x7c, 0xf1, 0xe3, 0x2e, 0x89, 0x8b, 0x3b, 0xa5, 0xcc, 0x86, 0xb8, 0x1e, 0x05, 0x91, 0x9f,
-    0xdc, 0x5f, 0xd3, 0xf3, 0xa2, 0x25, 0x68, 0x77, 0xc9, 0x5e, 0x21, 0xf2, 0xb2, 0x2c, 0xee, 0xca, 0x14, 0x06, 0xef,
-    0x3d, 0xbf, 0xe8, 0x07, 0x7f, 0x4f, 0x14, 0xb2, 0xad, 0xf4, 0x00, 0xe5, 0x0b, 0x52, 0xea, 0xe8, 0xfa, 0xc9, 0xba,
-    0xc5, 0xea, 0xcd, 0x54, 0x66, 0x5b, 0xa1, 0x0b, 0x61, 0x79, 0xf0, 0x31, 0xbb, 0x98, 0x04, 0x3d, 0x94, 0x67, 0x8d,
-    0xe2, 0x3b, 0xeb, 0xc9, 0x3a, 0x3b, 0xd3, 0x17, 0x7e, 0xf2, 0x89, 0x4d, 0xac, 0x71, 0x90, 0x8c, 0x43, 0xa6, 0xf7,
-    0xf4, 0x51, 0xe8, 0x47, 0x9f, 0xf8, 0xa7, 0x15, 0xaf, 0x32, 0x94, 0x50, 0xef, 0x7c, 0xfb, 0x0a, 0x98, 0x10, 0xcb,
-    0x0e, 0x89, 0xd5, 0x06, 0x28, 0x68, 0x2f, 0x25, 0xc3, 0xab, 0x20, 0x14, 0x8b, 0x52, 0x26, 0x28, 0x58, 0x82, 0xd0,
-    0x1c, 0x2c, 0x56, 0x4d, 0x1d, 0xd7, 0x4b, 0x37, 0xd5, 0xa9, 0x12, 0xb3, 0x52, 0x86, 0x5c, 0xbc, 0xc6, 0x16, 0xfe,
-    0x78, 0x77, 0x14, 0x0c, 0x7b, 0xff, 0xee, 0x64, 0x2b, 0x5f, 0x36, 0x43, 0x48, 0xb5, 0xc8, 0x52, 0xe2, 0x01, 0x9d,
-    0x73, 0x02, 0x73, 0x73, 0xd7, 0x6a, 0x65, 0x3f, 0x4d, 0x57, 0x0b, 0x36, 0x21, 0xc9, 0xe0, 0x59, 0x31, 0xa8, 0xf2,
-    0xcb, 0x42, 0x1d, 0xd8, 0x6f, 0x2b, 0xef, 0xf8, 0xf0, 0x25, 0x68, 0x2c, 0x00, 0x41, 0x19, 0x4f, 0xa7, 0x7a, 0xf1,
-    0xc6, 0xdf, 0x51, 0xcd, 0x3d, 0xfc, 0x6d, 0xf5, 0xe6, 0xb5, 0xf3, 0x46, 0x56, 0x8e, 0x80, 0x30, 0x16, 0xe2, 0x57,
-    0x4e, 0x17, 0x2b, 0xe3, 0x15, 0x33, 0x9a, 0xfa, 0xd1, 0xe6, 0xe9, 0x5c, 0x96, 0xb6, 0xf8, 0x92, 0xb1, 0x09, 0x10,
-    0xdc, 0x66, 0x2d, 0xf5, 0x3a, 0x64, 0x37, 0x4c, 0x8a, 0x76, 0xeb, 0x9d, 0x35, 0xd4, 0x40, 0xdf, 0x73, 0x5c, 0x64,
-    0xcc, 0xa9, 0x3a, 0x65, 0x4a, 0x43, 0x9c, 0x03, 0x9f, 0xb9, 0x7a, 0xc4, 0x2a, 0x47, 0x6a, 0x68, 0xea, 0xca, 0x00,
-    0x36, 0x8e, 0xec, 0x6c, 0x43, 0x7a, 0x0f, 0x03, 0x4f, 0x37, 0x8f, 0xcd, 0x74, 0x8d, 0x1e, 0xf8, 0xea, 0xe6, 0x70,
-    0x0a, 0xe1, 0xe4, 0xb5, 0x0a, 0x76, 0xc8, 0x26, 0x88, 0x35, 0x31, 0xc9, 0x74, 0xe2, 0xbe, 0x08, 0x6d, 0x47, 0x54,
-    0xfb, 0x15, 0x7c, 0xa8, 0xc6, 0xb5, 0xd1, 0xca, 0x33, 0x1f, 0x61, 0x40, 0xd7, 0x88, 0xa5, 0xe9, 0x46, 0x80, 0xc9,
-    0x45, 0x37, 0xf5, 0xa2, 0x74, 0x19, 0x1e, 0x45, 0xba, 0xe9, 0x98, 0x40, 0x12, 0xe0, 0x04, 0xab, 0x7d, 0xe1, 0xf5,
-    0x72, 0xbd, 0xe0, 0xfa, 0x2a, 0xc9, 0x6c, 0xa4, 0x73, 0x5d, 0x82, 0x4d, 0xf9, 0xb7, 0x3a, 0x1f, 0x54, 0xe9, 0x9a,
-    0x6e, 0x1c, 0x5a, 0xab, 0x84, 0x7a, 0x6b, 0xec, 0x22, 0x6c, 0x40, 0x8c, 0xa9, 0x82, 0x5f, 0xd9, 0x74, 0xca, 0xc6,
-    0x59, 0x6a, 0x08, 0xe6, 0x91, 0xf4, 0x1e, 0x0b, 0x56, 0x43, 0x8f, 0x06, 0xfa, 0x4f, 0x60, 0x43, 0x2f, 0x9c, 0x2c,
-    0xf1, 0x01, 0x89, 0x37, 0x53, 0x33, 0x98, 0xa8, 0xc5, 0x32, 0x88, 0x78, 0x2f, 0x10, 0x1c, 0xbc, 0x21, 0x1d, 0x87,
-    0xc6, 0xef, 0x9f, 0x62, 0x5f, 0xc4, 0x52, 0xab, 0x65, 0x3b, 0x2a, 0xda, 0x76, 0x7c, 0xd7, 0xee, 0x9b, 0x8e, 0xeb,
-    0xe4, 0xba, 0x09, 0xb6, 0x5b, 0x9f, 0xf6, 0x3d, 0xf4, 0x58, 0xab, 0x0d, 0xb5, 0x56, 0xd1, 0x43, 0xea, 0x79, 0xee,
-    0x0b, 0x57, 0x37, 0x49, 0x65, 0x4e, 0xc1, 0x6d, 0xe3, 0xf8, 0x86, 0x25, 0x5f, 0x3c, 0x95, 0x72, 0xe3, 0xfb, 0x8d,
-    0xe7, 0xc8, 0x75, 0x00, 0x09, 0x67, 0xf1, 0xf2, 0x01, 0x53, 0x68, 0xeb, 0xa6, 0x3e, 0x0e, 0xe3, 0x94, 0xa9, 0x73,
-    0x20, 0x26, 0xc8, 0x17, 0x4e, 0xe2, 0xe7, 0xf7, 0xaf, 0x3f, 0x7c, 0xd0, 0x4d, 0x8c, 0x04, 0x9a, 0xaa, 0xad, 0xf3,
-    0x0d, 0xb5, 0x03, 0xfb, 0x37, 0xee, 0x3b, 0xba, 0x61, 0xe8, 0x51, 0x5b, 0xde, 0x73, 0x94, 0x56, 0xdb, 0x72, 0xfc,
-    0xe6, 0xe1, 0x3d, 0xd3, 0x4b, 0x74, 0xaf, 0x79, 0x35, 0xe0, 0x86, 0xed, 0xd7, 0x5b, 0x29, 0x65, 0x11, 0x44, 0xd7,
-    0x0d, 0xa9, 0xfe, 0x5d, 0x43, 0x2a, 0x3c, 0xe5, 0x6a, 0xb8, 0x6a, 0x15, 0x2f, 0x14, 0xd2, 0x00, 0x02, 0x39, 0xef,
-    0x02, 0x97, 0xf2, 0x9e, 0xfa, 0x82, 0x41, 0x73, 0x4f, 0xee, 0xd5, 0x51, 0x37, 0x24, 0xf3, 0x47, 0x90, 0x84, 0xed,
-    0x38, 0x04, 0x85, 0x3f, 0xa6, 0x4a, 0xe5, 0xca, 0x64, 0xa3, 0x54, 0xd7, 0x55, 0x1a, 0x21, 0xf2, 0xf6, 0x3a, 0x63,
-    0x8b, 0x25, 0x4b, 0xfc, 0x6c, 0x95, 0xb0, 0xeb, 0x30, 0xbe, 0x7d, 0x54, 0xa8, 0xd3, 0xef, 0x28, 0x3c, 0x0f, 0x66,
-    0x73, 0x59, 0xfa, 0xac, 0xc5, 0x06, 0x72, 0x01, 0xb7, 0x76, 0x90, 0xff, 0xe7, 0xdf, 0xb6, 0xfd, 0x9f, 0x7f, 0xef,
-    0x2c, 0x0a, 0xcd, 0xe7, 0x43, 0x33, 0x1b, 0xec, 0xb1, 0x2f, 0x9a, 0x7b, 0x2a, 0xc3, 0xbc, 0xb9, 0x4c, 0x6d, 0x11,
-    0x20, 0xbf, 0xb6, 0x04, 0xb5, 0xc4, 0xf2, 0xbe, 0x79, 0xd0, 0xc0, 0x60, 0x5e, 0x3b, 0x47, 0x06, 0x85, 0xbe, 0x68,
-    0x68, 0x43, 0xa3, 0xb7, 0xd7, 0x8a, 0xfc, 0x71, 0x08, 0xef, 0x9a, 0xc3, 0x17, 0x0e, 0x9f, 0xf3, 0x25, 0x5f, 0x0e,
-    0x87, 0x32, 0xb6, 0x9c, 0x5a, 0x15, 0x54, 0xfc, 0xcf, 0x6a, 0x29, 0xfc, 0xf2, 0xec, 0x39, 0x06, 0xd9, 0xde, 0x0f,
-    0x5e, 0x0e, 0x51, 0x19, 0xed, 0x64, 0x94, 0x14, 0xc4, 0xca, 0x46, 0xd4, 0x46, 0xca, 0xe4, 0xb5, 0x46, 0x6b, 0x78,
-    0x0d, 0x52, 0x31, 0xe0, 0x58, 0x3e, 0x34, 0xcc, 0x97, 0x43, 0xce, 0x58, 0xe2, 0xfa, 0xaf, 0xbd, 0xea, 0xd6, 0xe6,
-    0x6c, 0xd9, 0x12, 0xd0, 0x4d, 0x8d, 0xe4, 0x3f, 0x58, 0x98, 0x15, 0x7c, 0x3c, 0x64, 0xf0, 0x03, 0x47, 0x61, 0x98,
-    0x63, 0xbc, 0x93, 0x77, 0x9b, 0x74, 0xc4, 0x7e, 0xde, 0xad, 0x23, 0x76, 0xb1, 0x97, 0x8e, 0xd8, 0xcf, 0x5f, 0x5d,
-    0x47, 0xec, 0x9d, 0xaa, 0x23, 0x06, 0x8b, 0xf8, 0x9a, 0xed, 0xa5, 0xb8, 0x25, 0xb4, 0x36, 0xe2, 0xdb, 0x74, 0xe0,
-    0x72, 0x92, 0x36, 0x1d, 0xcf, 0x19, 0xf0, 0x08, 0xf8, 0xaa, 0x84, 0xf1, 0x0c, 0x94, 0xb8, 0xfe, 0x7c, 0x75, 0xab,
-    0x30, 0x9e, 0xa9, 0xca, 0x56, 0x11, 0xf7, 0xf8, 0x5a, 0x78, 0x71, 0x22, 0x05, 0x27, 0xc7, 0x14, 0x3e, 0x9f, 0xac,
-    0x43, 0x43, 0x89, 0x6a, 0x2d, 0xb5, 0xd7, 0x3c, 0xa1, 0x02, 0xd5, 0x43, 0xed, 0x29, 0x59, 0xd1, 0x7b, 0x2e, 0x7c,
-    0x5b, 0xa8, 0x2d, 0x48, 0x2d, 0x61, 0xf2, 0x13, 0xb1, 0xd6, 0x7f, 0xbb, 0x73, 0xbf, 0xbf, 0x74, 0xfb, 0x6d, 0x17,
-    0x8c, 0xb3, 0xe1, 0x85, 0x89, 0x09, 0x4e, 0xbf, 0xdd, 0x86, 0x84, 0x5b, 0x25, 0xc1, 0x83, 0x84, 0x40, 0x49, 0xe8,
-    0x40, 0xc2, 0x58, 0x49, 0x38, 0x82, 0x84, 0x89, 0x92, 0x70, 0x0c, 0x09, 0x37, 0x7a, 0x7e, 0x19, 0xc9, 0xe1, 0x1e,
-    0x1b, 0x57, 0x26, 0x3d, 0x2a, 0x44, 0xda, 0xb1, 0xe9, 0x82, 0xd6, 0x94, 0x3f, 0xeb, 0xc5, 0x26, 0x71, 0x17, 0x7b,
-    0x89, 0x79, 0x3b, 0x67, 0xe4, 0x28, 0xfa, 0x15, 0xde, 0x39, 0x76, 0x16, 0x83, 0xde, 0xb4, 0x70, 0xc0, 0x20, 0xe0,
-    0xa0, 0xe9, 0x06, 0x30, 0x8c, 0xfa, 0x72, 0xe5, 0x84, 0x13, 0x0b, 0x65, 0x2d, 0x8b, 0x3c, 0xea, 0xce, 0x92, 0x5b,
-    0xa0, 0xd0, 0x38, 0x69, 0xa9, 0x5c, 0xc9, 0xaf, 0xa1, 0x77, 0xf0, 0x8a, 0x8d, 0x56, 0x33, 0xed, 0x3c, 0x9e, 0xed,
-    0x54, 0x21, 0x50, 0xb3, 0x60, 0x94, 0x3a, 0x89, 0x5f, 0x2c, 0xb1, 0x2d, 0x79, 0x5f, 0xf4, 0x99, 0x97, 0xcb, 0x67,
-    0x30, 0x36, 0x2d, 0x23, 0x05, 0x16, 0xe8, 0x07, 0x60, 0xa4, 0xc8, 0xf0, 0xcf, 0x01, 0xce, 0xca, 0xf7, 0x85, 0xaf,
-    0x8c, 0xe7, 0xf4, 0x47, 0x96, 0xa6, 0xfe, 0x4c, 0x94, 0xaf, 0x8f, 0x13, 0x94, 0x76, 0xe4, 0xfb, 0x0b, 0x01, 0x08,
-    0x9c, 0xbc, 0xa0, 0xa6, 0x9b, 0x91, 0xc4, 0xb7, 0x1a, 0x68, 0xff, 0xc0, 0x86, 0x2a, 0xf4, 0x14, 0x02, 0x1b, 0x96,
-    0xb0, 0xac, 0x51, 0x00, 0x87, 0xff, 0x86, 0x85, 0xd5, 0xc4, 0xcc, 0x9f, 0x55, 0x93, 0x68, 0x1f, 0xe4, 0xea, 0xd8,
-    0xa4, 0x40, 0xbf, 0x94, 0xf8, 0x25, 0x12, 0xea, 0x30, 0x9e, 0xfd, 0xa9, 0xe2, 0xe9, 0x2d, 0x6a, 0x05, 0x1f, 0x22,
-    0x33, 0xc8, 0x86, 0x36, 0xc2, 0x58, 0xb3, 0x01, 0x84, 0xbd, 0x28, 0x9b, 0x5b, 0x68, 0x5a, 0xd6, 0xf2, 0x22, 0xc3,
-    0xb4, 0x71, 0x6d, 0xd7, 0x55, 0x83, 0xda, 0x5e, 0x32, 0x1b, 0xf9, 0x2d, 0xd7, 0x3b, 0x36, 0xc5, 0x1f, 0xdb, 0xe9,
-    0x18, 0x39, 0xb6, 0xa0, 0x4d, 0x82, 0x9b, 0xf5, 0x34, 0x8e, 0x32, 0x6b, 0xea, 0x2f, 0x82, 0xf0, 0xbe, 0xb7, 0x88,
-    0xa3, 0x38, 0x5d, 0xfa, 0x63, 0xd6, 0x2f, 0x1e, 0xd4, 0x7d, 0x74, 0xd5, 0xc0, 0xad, 0x05, 0x5d, 0xdb, 0x4b, 0xd8,
-    0x82, 0x6a, 0x4b, 0x4f, 0x0c, 0xd3, 0x90, 0xdd, 0xe5, 0xbc, 0xfb, 0x52, 0x61, 0x2a, 0x8a, 0x5b, 0x8e, 0x6a, 0x00,
-    0x45, 0xca, 0xdd, 0x3c, 0x80, 0x73, 0xa3, 0xfe, 0xd2, 0x9f, 0xa0, 0x67, 0x42, 0xdb, 0xeb, 0x24, 0x6c, 0xa1, 0xd9,
-    0x9d, 0x8d, 0x8d, 0x27, 0xf1, 0xed, 0x29, 0x8c, 0x16, 0x2b, 0x5b, 0x29, 0x0b, 0xa7, 0x98, 0x63, 0xa1, 0x65, 0x89,
-    0x68, 0xc7, 0xc2, 0x87, 0x38, 0xb4, 0xc6, 0x16, 0x7d, 0xc8, 0xee, 0x79, 0x9a, 0xd3, 0x5f, 0x04, 0x91, 0x45, 0xd3,
-    0x39, 0x76, 0x96, 0x4a, 0x5b, 0x2a, 0xfc, 0x8c, 0x35, 0x16, 0x77, 0x35, 0xa7, 0x0f, 0x8f, 0xb5, 0x69, 0x18, 0xdf,
-    0xf6, 0xe6, 0xc1, 0x64, 0xc2, 0xa2, 0x3e, 0x8e, 0x59, 0x26, 0xb2, 0x30, 0x0c, 0x96, 0x69, 0x90, 0xf6, 0x17, 0xfe,
-    0x1d, 0x6f, 0xf5, 0x70, 0x53, 0xab, 0x6d, 0xde, 0x6a, 0x7b, 0xef, 0x56, 0x95, 0x66, 0xc0, 0x8a, 0x85, 0xda, 0xe1,
-    0x43, 0xeb, 0x68, 0x4e, 0x65, 0x9e, 0x7b, 0xb7, 0xba, 0x4c, 0xd8, 0x7a, 0xe1, 0x27, 0xb3, 0x20, 0xea, 0x39, 0xb9,
-    0x7d, 0xb3, 0xa6, 0x8d, 0xf1, 0xb8, 0xdb, 0xed, 0xe6, 0xf6, 0x44, 0x7c, 0x39, 0x93, 0x49, 0x6e, 0x8f, 0xc5, 0xd7,
-    0x74, 0xea, 0x38, 0xd3, 0x69, 0x6e, 0x07, 0x22, 0xa1, 0xed, 0x8d, 0x27, 0x6d, 0x2f, 0xb7, 0x6f, 0x95, 0x12, 0xb9,
-    0xcd, 0xf8, 0x57, 0xc2, 0x26, 0x7d, 0xdc, 0x48, 0xa4, 0x56, 0xda, 0x3b, 0x76, 0x9c, 0x1c, 0x31, 0xc0, 0x65, 0x09,
-    0x37, 0x21, 0xaf, 0xe7, 0x6a, 0xbd, 0x77, 0x49, 0xad, 0xe8, 0x6e, 0x3c, 0x6e, 0x2c, 0x37, 0xf1, 0x93, 0x4f, 0x57,
-    0x9a, 0x32, 0x0b, 0xdf, 0xa7, 0x62, 0x6b, 0x01, 0x06, 0xeb, 0xae, 0x07, 0x2e, 0xbb, 0xfa, 0xa3, 0x38, 0x81, 0x33,
-    0x9b, 0xf8, 0x93, 0x60, 0x95, 0xf6, 0x5c, 0x6f, 0x79, 0x27, 0x92, 0xf8, 0x5e, 0x2f, 0x12, 0xf0, 0xec, 0xf5, 0xd2,
-    0x38, 0x0c, 0x26, 0x22, 0x69, 0xd3, 0x59, 0x72, 0x3d, 0xa3, 0x8f, 0x06, 0xeb, 0x01, 0xba, 0x5d, 0xf0, 0xc3, 0x50,
-    0xb3, 0xdb, 0xa9, 0xc6, 0xfc, 0x14, 0xf9, 0xcb, 0x9a, 0x93, 0x12, 0x5c, 0xd0, 0x38, 0xdd, 0x3d, 0x5c, 0xde, 0xc9,
-    0x3d, 0xef, 0x1e, 0x2d, 0xef, 0xf2, 0xbf, 0x2e, 0xd8, 0x24, 0xf0, 0xb5, 0x56, 0xb1, 0x9b, 0x5c, 0x07, 0x78, 0xd0,
-    0xc6, 0x7a, 0xc3, 0x36, 0x15, 0xc7, 0x02, 0x5c, 0x1b, 0x3e, 0x0a, 0x16, 0xcb, 0x38, 0xc9, 0xfc, 0x28, 0xcb, 0xf3,
-    0xe1, 0x55, 0x9e, 0xf7, 0x2f, 0x82, 0xd6, 0xe5, 0x3f, 0x5a, 0x74, 0x4f, 0x93, 0xcc, 0x26, 0x37, 0xae, 0xcc, 0xd7,
-    0x4c, 0xd5, 0x19, 0x81, 0x6b, 0x0c, 0xf5, 0x45, 0xd4, 0xc2, 0x74, 0x4b, 0xd6, 0x0b, 0x13, 0x90, 0x65, 0x71, 0xd2,
-    0x41, 0x29, 0x17, 0xc1, 0x1b, 0x08, 0x0a, 0xbc, 0x66, 0x83, 0x0b, 0x45, 0xff, 0x04, 0x88, 0x15, 0x2c, 0x4c, 0x76,
-    0x05, 0x4f, 0x36, 0xd1, 0x8c, 0xdf, 0xed, 0xa6, 0x19, 0x7f, 0xcd, 0xf6, 0xa1, 0x19, 0xbf, 0xfb, 0xea, 0x34, 0xe3,
-    0x93, 0xba, 0x5d, 0xc1, 0xdb, 0x78, 0xa0, 0x4b, 0x09, 0x03, 0x5c, 0x4d, 0x09, 0x79, 0xec, 0x79, 0xfb, 0x87, 0xcd,
-    0x00, 0x44, 0x6b, 0x14, 0x83, 0x8e, 0x6e, 0x6e, 0xe0, 0xc7, 0xbe, 0x8b, 0x06, 0x7f, 0x4f, 0xd4, 0xef, 0xe9, 0x74,
-    0xf0, 0x2a, 0x56, 0x12, 0xe4, 0x17, 0x57, 0xbe, 0x28, 0x79, 0x57, 0xa0, 0x1c, 0xa1, 0x85, 0x89, 0xf1, 0x27, 0xc0,
-    0x38, 0x9b, 0xb4, 0x8e, 0x27, 0x52, 0xfb, 0xac, 0x5f, 0x1e, 0x42, 0x4b, 0xaa, 0x7c, 0x0a, 0x13, 0x9c, 0x1a, 0x2b,
-    0x71, 0xc6, 0x32, 0x6e, 0x33, 0xfb, 0xfd, 0xfd, 0xdb, 0x49, 0xeb, 0x6d, 0x6c, 0xe4, 0x41, 0xfa, 0xae, 0x6a, 0x00,
-    0xc3, 0x65, 0x3f, 0x03, 0x75, 0x3a, 0x39, 0xd7, 0x20, 0x53, 0x03, 0x4c, 0x43, 0x36, 0x55, 0x3f, 0x2b, 0xcd, 0xb4,
-    0xa7, 0x56, 0xe4, 0x81, 0xae, 0x6a, 0x97, 0x31, 0xb7, 0x3e, 0x58, 0x73, 0x0a, 0x10, 0x63, 0x77, 0xa1, 0xdd, 0xf0,
-    0x84, 0xaa, 0x07, 0x93, 0x3c, 0x37, 0xfa, 0x02, 0x10, 0xca, 0x45, 0xcb, 0x76, 0x11, 0x71, 0xe9, 0xad, 0xd4, 0x69,
-    0xe0, 0x12, 0x42, 0x12, 0xff, 0xbd, 0x05, 0x81, 0x3a, 0x17, 0x16, 0x72, 0x98, 0xe9, 0x1a, 0x81, 0x8f, 0x14, 0x2d,
-    0x94, 0x09, 0x81, 0x04, 0x58, 0xc2, 0x5f, 0x64, 0x89, 0x84, 0xba, 0x0e, 0x27, 0x01, 0x07, 0x35, 0x02, 0xc0, 0xca,
-    0x5f, 0xf0, 0xb5, 0x09, 0xed, 0xf0, 0x32, 0xf8, 0x91, 0xeb, 0x92, 0xf6, 0xc3, 0xed, 0x77, 0x7a, 0x72, 0x00, 0x15,
-    0x4e, 0x2b, 0x8a, 0x03, 0x3b, 0x34, 0x14, 0x81, 0x94, 0x48, 0x6f, 0x4d, 0x3b, 0xbd, 0xd5, 0x9e, 0xad, 0x85, 0x87,
-    0x8c, 0xcc, 0x5f, 0x5a, 0xf0, 0xc4, 0x47, 0xdc, 0xcb, 0x31, 0x9e, 0xe2, 0x8c, 0xa3, 0xbf, 0x4a, 0x01, 0x37, 0xe2,
-    0x43, 0x15, 0xf1, 0x4f, 0x7f, 0xbc, 0x4a, 0xd2, 0x38, 0xe9, 0x2d, 0xe3, 0x20, 0xca, 0x58, 0x92, 0x23, 0xa8, 0x2e,
-    0x11, 0x3e, 0x02, 0x3c, 0x57, 0xeb, 0x78, 0xe9, 0x8f, 0x83, 0xec, 0xbe, 0xe7, 0x70, 0x92, 0xc2, 0xe9, 0x73, 0xea,
-    0xc0, 0x69, 0x2c, 0xdf, 0xe3, 0xd0, 0x7c, 0x8e, 0x84, 0x5f, 0x52, 0x27, 0x67, 0xd4, 0x6d, 0xde, 0x57, 0x72, 0xc9,
-    0x47, 0x08, 0x90, 0x1f, 0x7e, 0x62, 0xcd, 0x00, 0xcb, 0xc3, 0x52, 0x3b, 0x13, 0x36, 0x33, 0x11, 0x6b, 0x03, 0x5f,
-    0x5e, 0xfc, 0xb1, 0x3b, 0x86, 0xe6, 0x34, 0x27, 0x03, 0xc5, 0x63, 0xec, 0x33, 0xb2, 0x9e, 0x0f, 0x11, 0xb5, 0xcc,
-    0x7d, 0x4a, 0x8e, 0xd8, 0x34, 0x4e, 0x18, 0xf9, 0x93, 0x75, 0xbb, 0xcb, 0xbb, 0xfd, 0x9b, 0xdf, 0x3e, 0xfd, 0xe6,
-    0x76, 0xa2, 0x38, 0x6b, 0x89, 0xc6, 0x8c, 0x1d, 0xad, 0xd5, 0xef, 0x33, 0x20, 0x0d, 0x09, 0xf2, 0x63, 0x72, 0xdd,
-    0xd5, 0xd3, 0xf5, 0x7e, 0xa3, 0xdb, 0xae, 0x65, 0xcc, 0xef, 0xbc, 0x84, 0x85, 0x7e, 0x16, 0xdc, 0x08, 0x9a, 0xb1,
-    0x7d, 0xb4, 0xbc, 0x13, 0x6b, 0x8c, 0x17, 0xde, 0x03, 0x16, 0xa9, 0x32, 0x14, 0xb1, 0x48, 0xd5, 0x64, 0x5c, 0xa4,
-    0x7e, 0x6d, 0x36, 0xc2, 0x93, 0x45, 0xe5, 0xa6, 0xef, 0x2c, 0xef, 0xd4, 0x2b, 0xba, 0xa8, 0x26, 0x6f, 0xea, 0xaa,
-    0x0b, 0xb2, 0x45, 0x30, 0x99, 0x84, 0x2c, 0x2f, 0x2d, 0x74, 0x79, 0x2d, 0x15, 0xe0, 0x48, 0x38, 0xf8, 0xa3, 0x34,
-    0x0e, 0x57, 0x19, 0x6b, 0x06, 0x17, 0x01, 0xc7, 0x73, 0x0a, 0xe0, 0xe0, 0xef, 0xf2, 0x58, 0x3b, 0x40, 0x6e, 0xc3,
-    0x36, 0x71, 0xfa, 0xe0, 0x71, 0xd8, 0x6a, 0x97, 0x87, 0x0e, 0x59, 0x72, 0xd0, 0x66, 0xc3, 0x44, 0x4c, 0xb8, 0x96,
-    0x08, 0x7b, 0x6b, 0xb6, 0xcb, 0xd3, 0xa4, 0xd7, 0x55, 0x99, 0x94, 0x97, 0x27, 0xf3, 0xe7, 0x9c, 0xb1, 0x17, 0xcd,
-    0x67, 0xec, 0x85, 0x38, 0x63, 0xdb, 0x77, 0xe6, 0xe3, 0xa9, 0x0b, 0xff, 0xf5, 0x8b, 0x09, 0xf5, 0x1c, 0xad, 0xbd,
-    0xbc, 0xd3, 0xdc, 0xe5, 0x9d, 0x66, 0x79, 0xcb, 0x3b, 0x0d, 0x9b, 0x46, 0x7d, 0x10, 0xd3, 0xf6, 0x0c, 0xd3, 0xd1,
-    0x20, 0x11, 0xfe, 0x38, 0xa5, 0x2c, 0xf7, 0x10, 0xf2, 0xa0, 0x56, 0xa7, 0x9e, 0xe7, 0x6d, 0x3f, 0xea, 0x74, 0x96,
-    0x04, 0xd2, 0x36, 0xec, 0xcc, 0x1f, 0x8d, 0xd8, 0xa4, 0x37, 0x8d, 0xc7, 0xab, 0xf4, 0x5f, 0x7c, 0xfc, 0x1c, 0x88,
-    0x5b, 0x11, 0x41, 0xa5, 0x1d, 0x51, 0x15, 0x04, 0x25, 0x37, 0x4c, 0xb4, 0xb0, 0x96, 0xeb, 0xd4, 0x23, 0xf7, 0xc8,
-    0x9e, 0x7d, 0xd8, 0xb0, 0xc9, 0x9b, 0x01, 0xfd, 0xa7, 0xad, 0xd2, 0x66, 0x14, 0xf3, 0x05, 0x60, 0xd9, 0x0a, 0x8e,
-    0x87, 0x43, 0x83, 0xaf, 0xa6, 0xd3, 0x6d, 0x1e, 0xee, 0xa5, 0xe8, 0xe9, 0x4a, 0x5c, 0x2a, 0xfc, 0xde, 0xe2, 0x86,
-    0x29, 0xdb, 0x5b, 0xdd, 0xb4, 0x47, 0x6a, 0xad, 0x6e, 0xb9, 0x10, 0x8a, 0xb2, 0x7b, 0x62, 0xf9, 0xc7, 0x2f, 0x0e,
-    0xe1, 0x3f, 0xa2, 0xea, 0x7f, 0xcd, 0x9a, 0x08, 0xf5, 0xb7, 0x65, 0x4d, 0x70, 0x22, 0x95, 0x90, 0x10, 0xdf, 0xbf,
-    0xfc, 0x74, 0xfa, 0xb0, 0x0a, 0x7b, 0x97, 0x26, 0x55, 0xaa, 0x6a, 0xe9, 0xef, 0xe3, 0x18, 0x42, 0x77, 0xd6, 0x8b,
-    0x0b, 0xf0, 0x90, 0xb2, 0x7b, 0x36, 0x80, 0x4a, 0xe2, 0x1d, 0x41, 0x52, 0x7c, 0x1d, 0xeb, 0xd0, 0x53, 0xe2, 0xf5,
-    0xa6, 0xa7, 0xc4, 0xab, 0xdd, 0x4f, 0x89, 0x1f, 0xf6, 0x7a, 0x4a, 0xbc, 0xfa, 0xea, 0x4f, 0x89, 0xd7, 0xf5, 0xa7,
-    0xc4, 0x45, 0x2c, 0xf4, 0x67, 0xcd, 0xb7, 0x2b, 0xfe, 0xf3, 0x23, 0x09, 0xe5, 0xce, 0xe3, 0x41, 0xc7, 0x21, 0x97,
-    0xc7, 0x17, 0x7f, 0xf8, 0x61, 0x81, 0x1b, 0xf1, 0x3d, 0xaa, 0x93, 0x15, 0x4f, 0x0b, 0x8e, 0xd9, 0xb1, 0x1f, 0x25,
-    0x39, 0x8c, 0xa3, 0xd9, 0xcf, 0x20, 0x94, 0x05, 0x76, 0x60, 0xa2, 0x64, 0x04, 0xe9, 0xcf, 0xf1, 0x72, 0xb5, 0x7c,
-    0x0b, 0x6d, 0x7d, 0x0c, 0xd2, 0x60, 0x14, 0x32, 0x69, 0x89, 0x4c, 0xea, 0x6f, 0x9c, 0x27, 0x0e, 0x1a, 0xa7, 0xe2,
-    0xa7, 0x7f, 0x27, 0x7e, 0xa2, 0x4e, 0x2a, 0xff, 0x4d, 0x7a, 0x75, 0x7a, 0xf3, 0x43, 0x44, 0x08, 0x01, 0x95, 0x41,
-    0x3f, 0xfc, 0x31, 0x72, 0x11, 0x1b, 0x0d, 0xb3, 0x14, 0xfa, 0x0e, 0x1b, 0xdb, 0x61, 0xb5, 0x47, 0xcd, 0xca, 0x30,
-    0xa5, 0x0b, 0xae, 0x3a, 0x1b, 0x7e, 0x11, 0xaf, 0x52, 0x36, 0x89, 0x6f, 0x23, 0xdd, 0x8c, 0xa4, 0x91, 0x01, 0x48,
-    0x38, 0x65, 0x1d, 0x0c, 0x1e, 0xf9, 0x01, 0x09, 0xe5, 0x38, 0x69, 0xe9, 0x10, 0xbb, 0x74, 0xb5, 0xb4, 0x48, 0xd4,
-    0x6c, 0xe1, 0x14, 0x75, 0x19, 0xe5, 0xe8, 0x51, 0xab, 0x15, 0x0f, 0x1e, 0x56, 0x53, 0xa8, 0x6a, 0xc4, 0x36, 0xe7,
-    0x0a, 0xa7, 0xad, 0x48, 0x30, 0x17, 0x85, 0x1f, 0x8c, 0x86, 0x85, 0xe3, 0x39, 0x64, 0xba, 0x5a, 0xe4, 0x82, 0x17,
-    0x91, 0x7c, 0xc5, 0xd7, 0x83, 0x7b, 0x85, 0xa0, 0xcf, 0x97, 0x0a, 0x18, 0xdf, 0xdd, 0xb0, 0x24, 0xf4, 0xef, 0x5b,
-    0x46, 0x1e, 0x47, 0x3f, 0x02, 0x00, 0x5e, 0xc5, 0xb7, 0x91, 0x5a, 0x00, 0x83, 0xb5, 0x34, 0xec, 0xa5, 0x46, 0xff,
-    0x25, 0x60, 0xb8, 0xa2, 0x8c, 0x00, 0xc2, 0xe4, 0xce, 0xd8, 0xdf, 0x4d, 0xfa, 0xf7, 0x1f, 0x46, 0x6e, 0x9e, 0xc7,
-    0xb2, 0xa3, 0x5f, 0x96, 0x7b, 0x74, 0xf3, 0xf4, 0xe9, 0xa3, 0xcd, 0xd3, 0x2e, 0x87, 0x67, 0x6f, 0xa8, 0x6d, 0x6c,
-    0x3c, 0x05, 0x30, 0x8a, 0x8b, 0x78, 0x35, 0x9e, 0xa3, 0xa2, 0xeb, 0xd7, 0x9b, 0x6f, 0x06, 0x6d, 0x62, 0x94, 0x52,
-    0x39, 0xf5, 0x4a, 0x52, 0x01, 0x05, 0xec, 0xff, 0x35, 0x38, 0xe0, 0xfc, 0x1f, 0x82, 0xa1, 0xbe, 0x6b, 0xf8, 0x2b,
-    0x3e, 0x78, 0xd8, 0xe6, 0xed, 0x43, 0x30, 0x4d, 0xee, 0xda, 0x42, 0x08, 0xd7, 0x9a, 0x91, 0x4c, 0x5e, 0x05, 0x9a,
-    0xea, 0x46, 0x6e, 0x93, 0x87, 0x3c, 0xd1, 0x0b, 0xb3, 0xe9, 0x99, 0xce, 0x0d, 0x0d, 0x4c, 0xc6, 0xb1, 0x55, 0x05,
-    0xc9, 0x70, 0x95, 0x07, 0x86, 0xe8, 0xab, 0x9a, 0xb7, 0x08, 0x22, 0x13, 0xbd, 0xc0, 0xd7, 0x73, 0xfc, 0x3b, 0xf0,
-    0x83, 0x0c, 0xc8, 0xad, 0x9a, 0x05, 0x89, 0xa6, 0x6a, 0x37, 0x07, 0xa1, 0x9e, 0xf4, 0x46, 0x48, 0x08, 0x29, 0xde,
-    0xf0, 0x1b, 0x4d, 0xd3, 0x34, 0xf9, 0x8c, 0xd0, 0xe4, 0x3b, 0x02, 0xd3, 0xf1, 0x39, 0x00, 0xd2, 0x92, 0x7c, 0x79,
-    0x47, 0x29, 0xf0, 0x32, 0x40, 0x99, 0xac, 0x48, 0xe0, 0xae, 0xfe, 0x3a, 0x8e, 0x48, 0x10, 0x0f, 0x7a, 0x70, 0xd3,
-    0xe6, 0x27, 0xe0, 0x11, 0xb8, 0xa7, 0xe1, 0x83, 0x1d, 0x73, 0x39, 0x27, 0x58, 0x73, 0xe8, 0x73, 0xd8, 0x67, 0xcd,
-    0x3e, 0xe1, 0x22, 0x05, 0x0b, 0x82, 0xd4, 0xa1, 0xe2, 0xe2, 0xd9, 0x64, 0x0d, 0xb8, 0x11, 0xdf, 0x45, 0x77, 0xd9,
-    0x82, 0x45, 0x2b, 0x1d, 0x63, 0x42, 0xa1, 0x8f, 0x3e, 0x28, 0xf3, 0x8a, 0x88, 0x2d, 0xc0, 0x36, 0xcd, 0x35, 0xe7,
-    0x74, 0x17, 0xa6, 0x1c, 0xa5, 0xfa, 0xe6, 0x98, 0x0b, 0x36, 0x53, 0x8e, 0xdb, 0xaa, 0x37, 0x04, 0x5f, 0xd2, 0xb8,
-    0x6a, 0xc8, 0x45, 0x9a, 0xd0, 0xd0, 0x06, 0x79, 0xc7, 0xe0, 0xec, 0x22, 0x01, 0xf6, 0x96, 0x5f, 0x5d, 0x34, 0x29,
-    0x91, 0xf1, 0x2b, 0x8c, 0xa2, 0xc4, 0xa8, 0x37, 0xc3, 0xc7, 0x09, 0x8e, 0x89, 0x36, 0xb6, 0x33, 0xae, 0xb5, 0xb3,
-    0x61, 0xd2, 0x9f, 0xd8, 0x3d, 0x5d, 0x24, 0x04, 0xaa, 0x4f, 0xec, 0x1e, 0x74, 0xff, 0x5e, 0x03, 0x37, 0x45, 0xdf,
-    0x82, 0xae, 0x4d, 0x70, 0xf5, 0x3f, 0x06, 0x67, 0x55, 0x5b, 0x0e, 0x90, 0x93, 0x6f, 0xc1, 0xe2, 0x08, 0x62, 0x88,
-    0xea, 0x2c, 0x0e, 0x31, 0x57, 0xf1, 0x6f, 0x35, 0xc2, 0xd8, 0x6a, 0x38, 0x1a, 0xc6, 0x33, 0xd7, 0x71, 0x0e, 0x6a,
-    0xe5, 0x81, 0x91, 0xdd, 0x54, 0xda, 0x30, 0xb3, 0x81, 0xeb, 0x58, 0xc1, 0x33, 0xdb, 0xeb, 0xd7, 0xee, 0x68, 0xc5,
-    0x97, 0xe4, 0x10, 0xd9, 0x5f, 0xa7, 0x4f, 0xd6, 0xad, 0xda, 0x81, 0x34, 0xaa, 0x2a, 0xf3, 0x38, 0xb6, 0x9c, 0xf3,
-    0xbf, 0x86, 0xf5, 0xab, 0x9f, 0x3c, 0x59, 0x52, 0x5c, 0x93, 0x21, 0x78, 0x43, 0x6e, 0xc1, 0x31, 0xfa, 0x8b, 0xf6,
-    0x5c, 0x6b, 0xd1, 0xf1, 0x31, 0x8c, 0xa1, 0x0c, 0x97, 0x2d, 0x6c, 0xca, 0xd4, 0x06, 0x2a, 0x3d, 0xa6, 0x55, 0x0c,
-    0xc7, 0xfd, 0xae, 0xb2, 0x42, 0xa2, 0xb7, 0x95, 0x5a, 0xc0, 0xf6, 0x37, 0x5c, 0x9f, 0xf6, 0x08, 0xfc, 0x12, 0x40,
-    0x09, 0xf0, 0x9d, 0xbe, 0xb3, 0xc1, 0xd5, 0xb2, 0xdc, 0x5c, 0xf9, 0x92, 0xdc, 0xbf, 0x31, 0xbc, 0x74, 0x50, 0x86,
-    0x26, 0xdb, 0x6b, 0xbe, 0xee, 0x1e, 0xd8, 0x24, 0x8b, 0x26, 0xe5, 0x06, 0x2b, 0xf7, 0xd7, 0xfe, 0xcd, 0x95, 0x30,
-    0x0a, 0x04, 0x15, 0x88, 0x1b, 0x30, 0x4a, 0x1e, 0x47, 0xb8, 0xf9, 0xe9, 0xb8, 0x05, 0x7b, 0x51, 0x31, 0x58, 0x81,
-    0x3c, 0x82, 0xc9, 0x6a, 0x0a, 0x53, 0x1c, 0x3c, 0x57, 0xa3, 0x59, 0x70, 0x4b, 0x10, 0xa2, 0x1b, 0x77, 0x62, 0x26,
-    0x74, 0x0a, 0x8b, 0x3a, 0x01, 0xf7, 0x45, 0xb9, 0x2f, 0xd7, 0x3a, 0xd8, 0xcd, 0xb5, 0xce, 0x76, 0x71, 0xad, 0xc9,
-    0x9c, 0xea, 0x36, 0xf1, 0x97, 0x8a, 0x45, 0x9e, 0x20, 0xce, 0x55, 0xc3, 0xbc, 0x12, 0xab, 0x1b, 0xad, 0xaf, 0x44,
-    0xad, 0x5a, 0x6b, 0xa4, 0x25, 0x88, 0xec, 0x6f, 0xe5, 0x81, 0x22, 0x04, 0xea, 0x2a, 0x6f, 0xfc, 0xa2, 0xe0, 0x8d,
-    0xd3, 0xab, 0xa6, 0x30, 0xa4, 0x11, 0xd4, 0xbf, 0x62, 0xa4, 0x26, 0x5f, 0x07, 0x85, 0xb1, 0x5a, 0x31, 0x52, 0xc5,
-    0xfc, 0xaa, 0x78, 0x68, 0x28, 0x46, 0x7d, 0xe2, 0x95, 0x51, 0xb6, 0xed, 0x2b, 0x17, 0x2d, 0xac, 0xaf, 0x8a, 0x74,
-    0xe0, 0xba, 0xe3, 0x90, 0x65, 0xb2, 0xba, 0x6d, 0xca, 0xe6, 0x37, 0x6a, 0xb6, 0xb2, 0x49, 0xa4, 0x9d, 0x0c, 0x01,
-    0x58, 0xb0, 0xe9, 0x2b, 0x72, 0x6d, 0xa9, 0x03, 0x81, 0x83, 0x6c, 0x30, 0xeb, 0xdb, 0xcd, 0x9d, 0xa7, 0x78, 0x09,
-    0x85, 0x14, 0x5e, 0xe5, 0x41, 0x20, 0x7c, 0xaf, 0xd6, 0x0d, 0xb7, 0x3c, 0x5e, 0xf2, 0xfc, 0x7e, 0x07, 0xf6, 0xa2,
-    0xe6, 0xa8, 0x82, 0x7c, 0x3c, 0x99, 0x16, 0xa9, 0xe7, 0x62, 0xd1, 0x7a, 0xa3, 0xc4, 0xc4, 0x59, 0x73, 0xcb, 0x98,
-    0x32, 0x8f, 0x9e, 0x97, 0xe8, 0x89, 0x7e, 0xf9, 0xd6, 0x49, 0x56, 0x11, 0xfa, 0xb6, 0xb7, 0xb2, 0xc4, 0x1f, 0x7f,
-    0x52, 0x86, 0x2c, 0xf8, 0x9c, 0xc0, 0x03, 0x2e, 0x4b, 0x0a, 0xfa, 0x3e, 0xba, 0x82, 0x64, 0x3d, 0xdb, 0x4b, 0x15,
-    0xee, 0x4b, 0xef, 0xb1, 0xd3, 0xf6, 0x5f, 0x4c, 0x0f, 0x2b, 0x4c, 0x51, 0xaf, 0x53, 0x66, 0x99, 0x6f, 0x18, 0x47,
-    0x36, 0x5f, 0x2d, 0x46, 0x6b, 0x95, 0xb7, 0xaa, 0xb0, 0x5c, 0xeb, 0x6c, 0x56, 0xb5, 0xdb, 0xe9, 0x74, 0x5a, 0x66,
-    0x34, 0x3a, 0xda, 0x21, 0x32, 0x0b, 0x1f, 0x3b, 0x8e, 0x53, 0x1d, 0xfb, 0x76, 0xb0, 0x5b, 0xc8, 0xb7, 0xed, 0x36,
-    0x8e, 0x18, 0x61, 0xbb, 0x0b, 0x7e, 0x75, 0x70, 0xe4, 0x76, 0x71, 0xb2, 0x4b, 0x6a, 0x11, 0x7d, 0x52, 0x86, 0x08,
-    0x32, 0xb6, 0x48, 0x7b, 0x63, 0x86, 0x32, 0x18, 0x5b, 0x39, 0xd0, 0xa8, 0x38, 0x60, 0xcd, 0x40, 0x55, 0xc4, 0x15,
-    0xbb, 0xc2, 0xd1, 0x90, 0x1f, 0x5e, 0x63, 0xde, 0x8b, 0x4e, 0xf0, 0xa0, 0xac, 0xeb, 0x3c, 0x6d, 0x9c, 0x56, 0xc7,
-    0xf9, 0x4b, 0xa9, 0x9c, 0x06, 0x17, 0xe0, 0x5a, 0x08, 0xb4, 0x89, 0x3f, 0x8b, 0x7f, 0x4b, 0xfe, 0xff, 0x8b, 0xe5,
-    0x5d, 0x59, 0x7f, 0xa4, 0x0b, 0x1c, 0xed, 0xe2, 0xb4, 0xd0, 0xa8, 0x9b, 0xf6, 0x80, 0xd4, 0x32, 0x98, 0xaa, 0x02,
-    0x74, 0x10, 0xd2, 0x97, 0x02, 0x80, 0x34, 0xb0, 0xdf, 0x91, 0x62, 0x86, 0x25, 0x2e, 0x58, 0x88, 0x45, 0xf8, 0x3a,
-    0x98, 0x83, 0xf9, 0xbc, 0x8b, 0xf2, 0x83, 0xd2, 0x9e, 0x00, 0x69, 0x7c, 0x6d, 0x6e, 0x7b, 0xb1, 0xfb, 0xab, 0x72,
-    0x2d, 0xd1, 0x30, 0x80, 0xcc, 0x85, 0x43, 0x88, 0x8a, 0x04, 0x5a, 0x65, 0x73, 0xd3, 0x28, 0x65, 0xae, 0x2a, 0x67,
-    0x13, 0x03, 0xc3, 0xe6, 0x9a, 0x8b, 0x50, 0xdb, 0x42, 0x5a, 0x00, 0x93, 0xe5, 0xdb, 0x0f, 0xbf, 0x2d, 0x58, 0x62,
-    0x75, 0x3f, 0xba, 0xb8, 0xe4, 0xb8, 0x7f, 0x2d, 0xbc, 0x3b, 0x53, 0x3a, 0xff, 0xc8, 0x5f, 0xfc, 0xa1, 0x91, 0xa1,
-    0x77, 0x51, 0xe2, 0xd0, 0x71, 0x6d, 0x71, 0xcf, 0xd8, 0xab, 0xf4, 0x22, 0x88, 0xf6, 0x2f, 0xeb, 0xdf, 0xed, 0x5d,
-    0x16, 0x2e, 0x8c, 0xbd, 0x0b, 0xc3, 0x8d, 0x43, 0x9a, 0x0b, 0xd9, 0xe0, 0x07, 0x85, 0xa1, 0xa8, 0x5a, 0x1d, 0xeb,
-    0x58, 0x8b, 0xa8, 0xfc, 0x8b, 0xd5, 0x60, 0x78, 0x72, 0x76, 0xb7, 0x08, 0xb5, 0x1b, 0x96, 0x40, 0x68, 0x9f, 0x81,
-    0xee, 0xda, 0x8e, 0xae, 0xa1, 0x0d, 0x6d, 0x10, 0xcd, 0x06, 0xfa, 0x2f, 0x17, 0x6f, 0xac, 0xae, 0x7e, 0x06, 0x22,
-    0xda, 0x9b, 0x19, 0x5e, 0x7b, 0xe7, 0xfe, 0x3d, 0x4b, 0xae, 0x3d, 0x5d, 0xc3, 0x08, 0x3e, 0x74, 0xe1, 0x61, 0x9a,
-    0xe6, 0xe9, 0x7b, 0x04, 0x8a, 0xd0, 0x44, 0xac, 0x37, 0x1d, 0x50, 0x8e, 0xeb, 0x75, 0x35, 0xd7, 0x3b, 0xb4, 0x8f,
-    0xba, 0xfa, 0xe9, 0x37, 0x9a, 0x76, 0x32, 0x61, 0xd3, 0xf4, 0x14, 0x9f, 0x68, 0x27, 0x78, 0x47, 0xd0, 0x6f, 0x4d,
-    0xb3, 0xc7, 0x61, 0x6a, 0xb9, 0xda, 0x9a, 0x7f, 0x6a, 0xda, 0x34, 0x08, 0xc3, 0x9e, 0xf6, 0x78, 0xea, 0x4d, 0x0f,
-    0xa7, 0x2f, 0xfa, 0x3c, 0x39, 0xff, 0xa6, 0x54, 0xdc, 0xa4, 0x7f, 0x3d, 0xa5, 0x5a, 0x9a, 0x25, 0xf1, 0x27, 0xc6,
-    0xd5, 0x4e, 0x34, 0xf9, 0x78, 0xac, 0x56, 0xf5, 0xea, 0x3d, 0xb9, 0xdd, 0xd1, 0x78, 0xea, 0x15, 0xc5, 0x71, 0x8c,
-    0x07, 0x72, 0x90, 0x27, 0x07, 0x62, 0xe8, 0x27, 0x2a, 0x98, 0x5c, 0xab, 0x09, 0x50, 0xae, 0xce, 0xe7, 0x38, 0x13,
-    0xf3, 0x3b, 0x01, 0x3f, 0x8c, 0xd2, 0x5c, 0x17, 0x46, 0xa0, 0x6b, 0x93, 0x81, 0xfe, 0xa3, 0xeb, 0x75, 0x4d, 0xd7,
-    0x3d, 0xb2, 0x8f, 0xba, 0x63, 0xc7, 0x3c, 0xb4, 0x0f, 0xad, 0xb6, 0x7d, 0x64, 0x76, 0xad, 0xae, 0xd9, 0xfd, 0x5b,
-    0x77, 0x6c, 0x1d, 0xda, 0x87, 0xa6, 0x63, 0x75, 0x21, 0xd1, 0xea, 0x5a, 0xdd, 0x1b, 0xeb, 0xb0, 0x3b, 0x76, 0x30,
-    0xd5, 0xb3, 0x3b, 0x1d, 0xcb, 0x75, 0xec, 0x4e, 0xc7, 0xec, 0xd8, 0x47, 0x47, 0x96, 0xdb, 0xb6, 0x8f, 0x8e, 0xce,
-    0x3b, 0x5d, 0xbb, 0x0d, 0x79, 0xed, 0xf6, 0xb8, 0x6d, 0xbb, 0xae, 0x05, 0x7f, 0x99, 0x5d, 0xdb, 0xa3, 0x1f, 0xae,
-    0x6b, 0xb7, 0x5d, 0xd3, 0x09, 0x3b, 0x9e, 0x7d, 0xf4, 0xc2, 0xc4, 0xbf, 0xb1, 0x98, 0x89, 0x7f, 0x41, 0x33, 0xe6,
-    0x0b, 0xdb, 0x3b, 0xa2, 0x5f, 0xd8, 0xe0, 0xcd, 0x61, 0xf7, 0x57, 0xfd, 0x60, 0xe3, 0x1c, 0x5c, 0x9a, 0x43, 0xb7,
-    0x63, 0xb7, 0xdb, 0xe6, 0xa1, 0x6b, 0x77, 0xdb, 0x73, 0xeb, 0xd0, 0xb3, 0x8f, 0x8e, 0xc7, 0x96, 0x6b, 0x1f, 0x1f,
-    0x9b, 0x8e, 0xd5, 0xb6, 0x3d, 0xd3, 0xb5, 0x0f, 0xdb, 0xf8, 0xa3, 0x6d, 0x7b, 0x37, 0xc7, 0x2f, 0xec, 0xa3, 0xce,
-    0xfc, 0xc8, 0x3e, 0xfc, 0x78, 0xd8, 0xb5, 0xbd, 0xf6, 0xbc, 0x7d, 0x64, 0x7b, 0xc7, 0x37, 0x47, 0xf6, 0xe1, 0xdc,
-    0xf2, 0x8e, 0xb6, 0xd6, 0x74, 0x3d, 0x1b, 0x60, 0x84, 0xd9, 0x90, 0x61, 0xf2, 0x0c, 0xf8, 0x33, 0xc7, 0xba, 0xff,
-    0xc5, 0x66, 0xd2, 0x7a, 0xd5, 0x17, 0x76, 0xf7, 0x78, 0x4c, 0xc5, 0x21, 0xc1, 0x12, 0x25, 0xa0, 0xca, 0x8d, 0x45,
-    0xdd, 0x62, 0x73, 0x96, 0x68, 0x48, 0xfc, 0xe1, 0x9d, 0xdd, 0x58, 0xd0, 0x31, 0xf5, 0xfb, 0x3f, 0x6d, 0x47, 0x2e,
-    0x39, 0x44, 0xae, 0xfc, 0x86, 0xff, 0x43, 0x41, 0x5f, 0x86, 0xe6, 0xf9, 0x26, 0x41, 0xc5, 0xfb, 0xdd, 0x82, 0x8a,
-    0x37, 0xab, 0x7d, 0x04, 0x15, 0xef, 0xbf, 0xba, 0xa0, 0xe2, 0xbc, 0xaa, 0x27, 0xff, 0xbe, 0xea, 0x9b, 0xfe, 0xd7,
-    0x75, 0xf5, 0x19, 0x12, 0xf8, 0xad, 0xcb, 0x8b, 0xd5, 0x15, 0x78, 0x57, 0x7a, 0x1f, 0x0f, 0xde, 0xac, 0x4a, 0x4a,
-    0x60, 0x31, 0xe0, 0xd8, 0xf7, 0x31, 0xe1, 0xd8, 0xdf, 0x57, 0x03, 0xd0, 0x3c, 0xe1, 0x74, 0x49, 0x30, 0xb1, 0xe6,
-    0x7e, 0x38, 0x95, 0x34, 0x0d, 0xa4, 0xf4, 0x31, 0x19, 0xac, 0x12, 0xe0, 0xba, 0x06, 0x71, 0xd8, 0x6a, 0x11, 0xa5,
-    0xbd, 0x23, 0x07, 0x2e, 0x52, 0x6f, 0x9a, 0xe4, 0x95, 0xca, 0xb6, 0xf0, 0x47, 0x75, 0xcd, 0xad, 0x26, 0x36, 0xe6,
-    0xa3, 0x52, 0x60, 0x73, 0xeb, 0x6e, 0xbd, 0x5d, 0x0d, 0xb4, 0x6d, 0x84, 0xd2, 0x24, 0x90, 0x73, 0x4d, 0xf9, 0x65,
-    0xd5, 0xbc, 0x8a, 0x32, 0xe6, 0xe6, 0x91, 0xc2, 0x48, 0xaa, 0xf5, 0xdd, 0xb2, 0x6a, 0xdf, 0xae, 0x69, 0x36, 0x74,
-    0x5f, 0xaa, 0xbe, 0x45, 0xaf, 0x50, 0x36, 0x5c, 0x05, 0x55, 0x25, 0xb2, 0x5a, 0x23, 0x40, 0x0a, 0xea, 0xbe, 0x50,
-    0x3e, 0x2c, 0x48, 0x4b, 0x47, 0x43, 0x7a, 0xc7, 0x51, 0xf2, 0x4a, 0x6d, 0xaa, 0x0a, 0x8b, 0xcf, 0xd6, 0x48, 0x71,
-    0x07, 0xbf, 0x03, 0xe9, 0xc8, 0x29, 0x9e, 0x51, 0xac, 0xc2, 0x79, 0xad, 0xb4, 0x4b, 0x8f, 0x99, 0x7c, 0xee, 0xae,
-    0xeb, 0xc4, 0xe3, 0x46, 0x55, 0x65, 0x97, 0x2d, 0x04, 0x15, 0x84, 0xdd, 0x93, 0x62, 0x70, 0x4e, 0xca, 0xdb, 0xa8,
-    0xfb, 0xbc, 0xad, 0x31, 0x51, 0xee, 0x31, 0x6c, 0x62, 0x93, 0x7f, 0xa8, 0x7e, 0x01, 0xd6, 0x53, 0x88, 0x82, 0xdd,
-    0x43, 0x32, 0x4d, 0xa1, 0x51, 0x3d, 0xd4, 0x62, 0xee, 0x6f, 0x51, 0xb0, 0x51, 0x1b, 0xe6, 0x8d, 0xa0, 0x36, 0xf4,
-    0x36, 0x9d, 0x1c, 0x69, 0x3c, 0xb2, 0x2e, 0x89, 0xa8, 0xdd, 0xce, 0xb1, 0xe9, 0x1e, 0x99, 0xf6, 0x71, 0xc7, 0xc8,
-    0xc5, 0x81, 0x53, 0x9b, 0x2c, 0x01, 0x04, 0x94, 0xa2, 0xe5, 0x30, 0x83, 0x28, 0xc8, 0x02, 0x3f, 0xcc, 0x81, 0x3e,
-    0x2e, 0xbf, 0x2a, 0xfe, 0xb9, 0x4a, 0x33, 0x98, 0xa3, 0x20, 0x7a, 0x51, 0x21, 0xdc, 0x1a, 0xb1, 0xec, 0x96, 0xb1,
-    0x68, 0x83, 0xb0, 0xbc, 0xaa, 0x5f, 0xfe, 0xe7, 0x69, 0xdb, 0xe6, 0xa4, 0xc9, 0x32, 0xca, 0x22, 0xbe, 0x3f, 0x84,
-    0x32, 0x74, 0x3e, 0x34, 0x7f, 0xda, 0x84, 0x70, 0xff, 0xb9, 0x1b, 0xe1, 0x66, 0x6c, 0x1f, 0x84, 0xfb, 0xcf, 0xaf,
-    0x8e, 0x70, 0x7f, 0x52, 0x11, 0x6e, 0xc9, 0x16, 0xa8, 0xe0, 0x3a, 0x7f, 0xc0, 0xef, 0x16, 0x38, 0x75, 0x7e, 0xae,
-    0x1f, 0x10, 0x01, 0xaf, 0x2b, 0xc1, 0x76, 0x3f, 0x96, 0xa2, 0x07, 0x21, 0x53, 0x04, 0x9d, 0xd0, 0x52, 0xa4, 0x12,
-    0x08, 0x44, 0x2b, 0x43, 0xaa, 0x43, 0x9b, 0x6f, 0xa3, 0x2c, 0xb4, 0xdf, 0xf3, 0x87, 0x1f, 0x08, 0x79, 0xde, 0xc4,
-    0xc9, 0xc2, 0x47, 0x07, 0x7c, 0x3a, 0x46, 0x1d, 0x84, 0x0f, 0x07, 0xec, 0xcf, 0xc6, 0x71, 0x34, 0x91, 0x92, 0x0a,
-    0x36, 0xb8, 0x24, 0x8a, 0x5b, 0xbf, 0x67, 0x7e, 0xa2, 0x9b, 0x94, 0x0d, 0x8b, 0xfb, 0xac, 0xed, 0x3c, 0xf3, 0x0e,
-    0x9f, 0x1d, 0x39, 0xf0, 0xbf, 0xcb, 0xda, 0xb9, 0xc9, 0x0b, 0x2e, 0xe2, 0x08, 0x02, 0x9f, 0x88, 0x92, 0x9b, 0x8a,
-    0xdd, 0x32, 0xf6, 0xa9, 0x28, 0x75, 0xdc, 0x5c, 0x68, 0xe2, 0xdf, 0x17, 0x65, 0x1a, 0x4b, 0xcc, 0xe3, 0x95, 0x32,
-    0xac, 0x86, 0xd1, 0x04, 0xd1, 0x0a, 0x78, 0x6f, 0x4a, 0x09, 0x35, 0x9b, 0x4f, 0xb7, 0x98, 0x17, 0x6b, 0xe7, 0x57,
-    0x45, 0x74, 0x25, 0x11, 0xe5, 0x65, 0x27, 0x04, 0xb9, 0xd8, 0xc2, 0x41, 0xdf, 0xec, 0x18, 0x5f, 0x48, 0x83, 0xd8,
-    0x86, 0x62, 0x81, 0x7c, 0x5a, 0xa0, 0x2c, 0x59, 0x45, 0xe3, 0x16, 0xfe, 0xf4, 0x47, 0x69, 0x2b, 0x38, 0x00, 0xef,
-    0xac, 0xd8, 0xb1, 0x81, 0xab, 0xe6, 0x9f, 0x3a, 0x45, 0x28, 0x8a, 0x54, 0xac, 0x8a, 0xff, 0x2c, 0x33, 0x13, 0x0a,
-    0x60, 0x8b, 0x4b, 0x6b, 0x0d, 0xfc, 0x67, 0xb2, 0xe2, 0xb3, 0xcc, 0x84, 0x20, 0xb2, 0xb0, 0xdc, 0x4f, 0x9f, 0x52,
-    0x29, 0x08, 0xeb, 0x48, 0xd3, 0x3a, 0x1b, 0x17, 0xee, 0xdd, 0x34, 0x7f, 0x16, 0x93, 0x87, 0xb7, 0xde, 0xd8, 0x8c,
-    0x9f, 0x3f, 0x3f, 0x1d, 0xb8, 0x06, 0x0f, 0x4a, 0x5a, 0x8a, 0xa0, 0x75, 0xbe, 0x9f, 0xf2, 0x81, 0xd1, 0x68, 0x16,
-    0xb7, 0x84, 0x37, 0x93, 0x23, 0x54, 0x94, 0x39, 0xf6, 0x82, 0x88, 0x16, 0x24, 0x64, 0xf4, 0x85, 0x12, 0x80, 0x28,
-    0x23, 0x5f, 0x5d, 0x6d, 0xdb, 0xb1, 0x1d, 0x5d, 0x56, 0x9c, 0x06, 0xb3, 0xc1, 0x3a, 0xce, 0x7c, 0x88, 0x0d, 0x14,
-    0xc6, 0x33, 0xb0, 0xad, 0xc9, 0x82, 0x2c, 0x84, 0x40, 0x33, 0x60, 0x64, 0xb3, 0xa0, 0x77, 0x79, 0xce, 0x35, 0x9e,
-    0xfd, 0xe4, 0x13, 0x06, 0x1b, 0x14, 0x66, 0x75, 0xe8, 0x71, 0xe8, 0x47, 0xb8, 0x0c, 0x5b, 0x7a, 0x0b, 0x42, 0x5d,
-    0xb2, 0x24, 0xb5, 0x54, 0x0b, 0x82, 0x9e, 0x06, 0x75, 0x20, 0x0c, 0x3d, 0x36, 0x30, 0x4d, 0xfc, 0x05, 0xf8, 0x64,
-    0x5f, 0xe7, 0x26, 0xc7, 0xb4, 0x3a, 0x47, 0xb5, 0x9a, 0xfb, 0xe2, 0xc8, 0xd4, 0x3c, 0xd7, 0xd4, 0x1c, 0x40, 0xb7,
-    0x7a, 0x6e, 0xae, 0xf3, 0xab, 0xfe, 0x2e, 0x21, 0x28, 0xe1, 0x97, 0xc7, 0x34, 0x0f, 0x12, 0x7f, 0x72, 0xf6, 0x72,
-    0x46, 0x0e, 0x24, 0x5b, 0x8a, 0xb7, 0xf4, 0x80, 0x04, 0x21, 0x17, 0xec, 0x2e, 0x33, 0x30, 0x10, 0x0b, 0x2f, 0x12,
-    0x18, 0x6b, 0x34, 0xfe, 0x0b, 0x22, 0x2d, 0xf8, 0xfc, 0xb9, 0x15, 0x80, 0x81, 0xc3, 0x40, 0x81, 0x0f, 0x7c, 0x1b,
-    0x25, 0x80, 0x05, 0x85, 0xe8, 0x0e, 0x81, 0x05, 0xd6, 0x47, 0xf0, 0x6f, 0x91, 0x2c, 0x7e, 0x70, 0xd1, 0xa9, 0x1d,
-    0xfa, 0xd1, 0x0c, 0x50, 0x9a, 0x1f, 0xcd, 0x6a, 0x2a, 0x1a, 0x64, 0xbf, 0x58, 0x49, 0x2d, 0x9a, 0x2a, 0xd4, 0x27,
-    0xd2, 0xef, 0xef, 0x2f, 0x28, 0xd0, 0x14, 0x04, 0x35, 0xf7, 0x27, 0x68, 0x6c, 0x57, 0x48, 0x77, 0x9e, 0x0f, 0xbe,
-    0x3d, 0x59, 0xb0, 0xcc, 0x27, 0xd6, 0x30, 0x3c, 0x7e, 0x81, 0x1c, 0xd0, 0xc6, 0x22, 0x48, 0x2c, 0x05, 0x93, 0x9f,
-    0xb0, 0x9b, 0x60, 0xcc, 0xdf, 0xa5, 0xa6, 0xc6, 0xef, 0x29, 0x0b, 0xb5, 0xc0, 0x06, 0xae, 0x49, 0x4a, 0xc8, 0x63,
-    0x1f, 0xdd, 0x4c, 0x0e, 0xa2, 0x58, 0x3f, 0xfd, 0x56, 0xda, 0x6b, 0x6d, 0x5a, 0x04, 0x88, 0xf6, 0x78, 0x99, 0xb0,
-    0xf0, 0x5f, 0x83, 0x6f, 0xe1, 0xe2, 0xfe, 0xf6, 0x4a, 0x37, 0xfa, 0x99, 0x3d, 0x4f, 0xd8, 0x74, 0xf0, 0x6d, 0x43,
-    0xd4, 0x43, 0x7c, 0xde, 0xd3, 0x58, 0xf4, 0xb6, 0x57, 0x38, 0x07, 0x6a, 0xef, 0xf5, 0xa8, 0x3f, 0xe5, 0xaf, 0x75,
-    0x78, 0x01, 0xae, 0x4b, 0x6f, 0x6c, 0xb7, 0x8f, 0xef, 0xe7, 0x51, 0xe8, 0x8f, 0x3f, 0xf5, 0x29, 0xa7, 0xf4, 0x61,
-    0xc1, 0x6d, 0x3d, 0xf6, 0x97, 0x3d, 0xbc, 0x5e, 0xd5, 0x44, 0x30, 0xd7, 0xa4, 0x54, 0x49, 0xd9, 0x35, 0xee, 0x65,
-    0xdc, 0xca, 0x6b, 0xec, 0x19, 0xbb, 0xba, 0x9d, 0x07, 0x19, 0x13, 0x5d, 0xe1, 0x47, 0x9e, 0x8b, 0x87, 0x3a, 0x3d,
-    0x51, 0xf1, 0x61, 0x6d, 0xb7, 0x35, 0xb7, 0xfb, 0xb7, 0xce, 0x8d, 0xeb, 0xcc, 0x3d, 0xd7, 0xee, 0x7e, 0x74, 0xbb,
-    0xf3, 0xb6, 0x7d, 0x1c, 0x5a, 0x6d, 0xfb, 0x18, 0xfe, 0x7c, 0x3c, 0xb6, 0xbb, 0x73, 0xcb, 0xb3, 0x0f, 0x3f, 0xba,
-    0x5e, 0x68, 0x75, 0xed, 0x63, 0xf8, 0x73, 0x4e, 0xb5, 0xe0, 0x01, 0x44, 0xef, 0x9d, 0x6f, 0x4b, 0x58, 0x40, 0xf9,
-    0x2d, 0xe5, 0x34, 0x66, 0xe9, 0x7a, 0x6b, 0x90, 0xf5, 0x00, 0xca, 0xd0, 0x4d, 0xe1, 0x04, 0x32, 0xea, 0xb7, 0x20,
-    0x0c, 0x3b, 0x06, 0x10, 0x10, 0x2a, 0x2f, 0xc2, 0x2e, 0x55, 0xb8, 0xd2, 0x6f, 0x3c, 0x46, 0xbc, 0x4e, 0xb3, 0xc3,
-    0x75, 0x11, 0x99, 0x8a, 0x84, 0x43, 0xbf, 0x2c, 0xd1, 0x89, 0x91, 0x70, 0x11, 0xaf, 0x60, 0xa5, 0x22, 0x3a, 0x62,
-    0xbe, 0x7b, 0xe0, 0x68, 0x99, 0xcb, 0x64, 0x74, 0x9e, 0xaf, 0xda, 0x36, 0x17, 0x18, 0xc9, 0xd6, 0xff, 0x68, 0x3b,
-    0x18, 0x94, 0x96, 0xda, 0x11, 0xde, 0x5c, 0x27, 0x41, 0x22, 0x87, 0xa7, 0xa0, 0x68, 0xb7, 0xd9, 0x53, 0xbd, 0x01,
-    0x61, 0x4c, 0xde, 0x02, 0x95, 0x7c, 0xe3, 0x87, 0x8a, 0x72, 0x8b, 0x52, 0xf3, 0x91, 0xc4, 0xfc, 0x4f, 0x9f, 0x16,
-    0x83, 0xb3, 0x2a, 0xe3, 0x3e, 0x71, 0x3b, 0x70, 0xed, 0x76, 0x58, 0x7b, 0xab, 0x9e, 0xd5, 0x6e, 0x77, 0xc0, 0x85,
-    0xbb, 0x50, 0xa1, 0x4b, 0x21, 0xa4, 0xb8, 0x1b, 0x95, 0xbd, 0x6a, 0x32, 0x5c, 0x70, 0xa4, 0x5c, 0x79, 0xea, 0xe8,
-    0x46, 0x3f, 0x12, 0x22, 0xc9, 0x68, 0x8b, 0x0b, 0x64, 0xfe, 0x16, 0xd3, 0x01, 0x34, 0x5b, 0xe6, 0xb1, 0xc3, 0x68,
-    0xf4, 0x7f, 0x3d, 0x09, 0x34, 0xe0, 0x02, 0x19, 0x6a, 0xe5, 0xb4, 0x96, 0x0c, 0x7a, 0xe4, 0xbd, 0x4a, 0x17, 0x2a,
-    0x4b, 0xcf, 0x74, 0x48, 0x82, 0xf8, 0x56, 0x18, 0xd2, 0x4e, 0x2a, 0x90, 0xc9, 0xdb, 0xa2, 0x48, 0x30, 0x03, 0xf0,
-    0x01, 0xde, 0x12, 0xc6, 0x64, 0xc6, 0xd3, 0xa7, 0x1b, 0x2f, 0x21, 0x12, 0xd8, 0xab, 0x91, 0x3d, 0x75, 0x15, 0xbf,
-    0xe9, 0x2a, 0x8a, 0x91, 0xed, 0x22, 0xd6, 0x10, 0x7a, 0x6f, 0xb4, 0xf7, 0xf0, 0xe7, 0x88, 0xf9, 0x99, 0xcd, 0x25,
-    0x4d, 0x2d, 0xe5, 0x72, 0x37, 0x5d, 0xd6, 0x06, 0x8d, 0x37, 0xee, 0xeb, 0x8c, 0xfb, 0x12, 0x7c, 0xb2, 0xfe, 0xb8,
-    0xe2, 0x96, 0xde, 0xd0, 0xc6, 0x67, 0xa7, 0x70, 0x4f, 0xf3, 0x2e, 0xf3, 0xc9, 0x87, 0x89, 0x7a, 0xe5, 0xc6, 0x99,
-    0x2f, 0xe2, 0xc8, 0x00, 0x5d, 0xde, 0x6f, 0x14, 0xc9, 0x2a, 0xd6, 0xe0, 0xa7, 0xef, 0x2e, 0xbe, 0xd3, 0xf8, 0xfe,
-    0x27, 0x09, 0x22, 0x3e, 0x64, 0x28, 0xea, 0xc1, 0x80, 0xa2, 0x1e, 0x68, 0x3c, 0x8c, 0x08, 0xc4, 0x0e, 0xc8, 0x0f,
-    0x08, 0x82, 0xc8, 0x80, 0x26, 0xb9, 0xea, 0x62, 0x15, 0x66, 0xc1, 0xd2, 0x4f, 0xb2, 0x03, 0xa8, 0x6a, 0x01, 0x92,
-    0xd3, 0x37, 0xd9, 0x88, 0x93, 0x68, 0x56, 0xb8, 0xd8, 0xcb, 0x22, 0x21, 0x9b, 0x9d, 0x06, 0xa1, 0x14, 0xcd, 0x8a,
-    0x0e, 0xfc, 0xf1, 0x98, 0x2d, 0xb3, 0x81, 0xee, 0x2f, 0x21, 0xfa, 0x05, 0xfa, 0xb3, 0x3e, 0x88, 0xc7, 0x19, 0xcb,
-    0xac, 0x34, 0x4b, 0x98, 0xbf, 0xd0, 0xa5, 0x2b, 0xd7, 0x7a, 0x7b, 0xe9, 0x6a, 0xb4, 0x08, 0x32, 0xe9, 0x0b, 0x91,
-    0x26, 0x08, 0x42, 0x52, 0x18, 0xe2, 0xe9, 0x30, 0xe7, 0x20, 0x3c, 0x8f, 0x67, 0x95, 0x1d, 0x55, 0x50, 0x2e, 0x67,
-    0xe8, 0x69, 0x97, 0x47, 0x3c, 0x98, 0xa0, 0xcd, 0xd3, 0x35, 0xb7, 0x6b, 0x97, 0x2e, 0x1b, 0xf5, 0xd3, 0x13, 0xfe,
-    0xbc, 0xd5, 0xd0, 0x15, 0x83, 0xde, 0x71, 0xc0, 0x97, 0xf0, 0x26, 0x8b, 0xf7, 0x03, 0x5e, 0x18, 0xae, 0x26, 0x6a,
-    0x19, 0xfd, 0xbc, 0xd3, 0x58, 0x2e, 0x80, 0x10, 0x2a, 0x09, 0xd1, 0xe7, 0xee, 0xa9, 0x34, 0xb1, 0xc2, 0x51, 0x21,
-    0xad, 0xf4, 0xf9, 0xf3, 0xcb, 0xe1, 0x7f, 0xfe, 0x0d, 0xce, 0xe8, 0xe7, 0xae, 0xb0, 0x33, 0xbf, 0x54, 0x4b, 0x71,
-    0xea, 0xd3, 0x1c, 0xa2, 0x02, 0x05, 0x9b, 0x08, 0xc7, 0x2b, 0x62, 0x6b, 0xe5, 0xc3, 0x2b, 0xe1, 0x4c, 0x0b, 0x02,
-    0x4e, 0x18, 0xc2, 0x1a, 0x7e, 0x08, 0xcb, 0x3b, 0x14, 0x4e, 0x18, 0xb4, 0xdf, 0xee, 0xbe, 0x3f, 0x06, 0x67, 0xcb,
-    0xb5, 0x38, 0x10, 0xca, 0x00, 0x71, 0x0f, 0x9d, 0x9e, 0xf8, 0x1a, 0x12, 0x2d, 0x48, 0x7e, 0xa4, 0xbd, 0x03, 0x98,
-    0xe6, 0x3c, 0x5e, 0x30, 0x3b, 0x88, 0x0f, 0x6e, 0xd9, 0xc8, 0xf2, 0x97, 0x01, 0xc9, 0xea, 0x91, 0xef, 0xa6, 0x11,
-    0xe5, 0x27, 0x45, 0xe0, 0x44, 0x5f, 0xe7, 0x05, 0x28, 0xe3, 0x02, 0x50, 0xf0, 0xd3, 0x3f, 0x2d, 0xfb, 0x67, 0xb4,
-    0x45, 0x84, 0x80, 0x32, 0x96, 0x3f, 0x23, 0x37, 0x8b, 0xc2, 0xa3, 0x62, 0xf1, 0x61, 0xc5, 0xd3, 0xa9, 0xea, 0x53,
-    0xd1, 0x2e, 0xf7, 0x2f, 0xa1, 0x52, 0xec, 0xd9, 0x78, 0x49, 0x3d, 0xd5, 0xbb, 0x90, 0x3f, 0x21, 0x3a, 0x32, 0x77,
-    0xbf, 0x09, 0xe7, 0xb9, 0xe6, 0x9b, 0x51, 0x82, 0xe4, 0x31, 0x15, 0xe2, 0x88, 0xa2, 0xea, 0x09, 0x7c, 0x03, 0x69,
-    0xf2, 0x68, 0x30, 0x20, 0x3c, 0x56, 0x45, 0x67, 0x00, 0xa5, 0x86, 0x68, 0x09, 0x30, 0xd9, 0x0c, 0x2a, 0x5a, 0x64,
-    0x23, 0x87, 0x95, 0xaa, 0xd3, 0xa9, 0x8f, 0xf1, 0xc0, 0x17, 0xfb, 0xab, 0xb4, 0x03, 0x61, 0x67, 0xf1, 0x85, 0x05,
-    0x04, 0x2e, 0xda, 0xa9, 0xe0, 0x71, 0xed, 0xaf, 0x84, 0xb2, 0xad, 0xd0, 0xbf, 0x8f, 0x15, 0xdd, 0x05, 0xee, 0xc6,
-    0xe0, 0x1c, 0x53, 0x2f, 0x84, 0xf9, 0x60, 0xed, 0x24, 0x49, 0x8f, 0xf3, 0xf5, 0xd3, 0xa4, 0xba, 0x88, 0xdf, 0x75,
-    0x98, 0xd4, 0xb2, 0xe5, 0xc9, 0x20, 0x76, 0xcc, 0x8b, 0x83, 0x56, 0xca, 0xc4, 0x73, 0x9f, 0x9f, 0x1c, 0xc0, 0xfc,
-    0xc0, 0xf5, 0x42, 0x89, 0x32, 0x0a, 0x0c, 0xf0, 0xef, 0xe0, 0xa7, 0xa4, 0x7f, 0xf1, 0x76, 0x22, 0x88, 0x3a, 0x7c,
-    0x39, 0x4a, 0xe7, 0xaf, 0xa5, 0x22, 0x75, 0x62, 0xc5, 0x69, 0xa6, 0xf2, 0x76, 0x47, 0x68, 0xf8, 0x7d, 0x85, 0xe1,
-    0x19, 0xf2, 0x7e, 0xc6, 0x84, 0x65, 0xf3, 0x79, 0xb6, 0xc1, 0xf8, 0x79, 0x53, 0x11, 0x22, 0x58, 0xb7, 0x14, 0x28,
-    0xf6, 0xf1, 0xb6, 0x52, 0x05, 0x69, 0x24, 0x8b, 0x2d, 0xfd, 0x96, 0xfe, 0x18, 0x77, 0x7c, 0xad, 0x34, 0xa6, 0x42,
-    0xb9, 0xf3, 0x6c, 0x00, 0x45, 0x05, 0xb3, 0xdd, 0x5f, 0x2e, 0xa9, 0xb0, 0xd1, 0x3f, 0x39, 0xa0, 0x77, 0xe7, 0x29,
-    0xed, 0xb0, 0xd3, 0x13, 0xd0, 0xdf, 0xa4, 0x45, 0xf7, 0x97, 0x4b, 0xbe, 0xa4, 0xf4, 0x8b, 0x72, 0x0e, 0xe6, 0xd9,
-    0x22, 0x3c, 0xfd, 0x3f, 0x1d, 0xdb, 0x6f, 0x83, 0x01, 0x5c, 0x03, 0x00};
+    0xdc, 0xb3, 0x37, 0xb7, 0x6d, 0x23, 0xff, 0x7f, 0x3f, 0x05, 0xc3, 0xe4, 0x52, 0x31, 0x21, 0x69, 0x92, 0xb2, 0x6c,
+    0x45, 0xb2, 0xec, 0x6b, 0xf3, 0x98, 0x4b, 0xc7, 0x6d, 0x3a, 0x89, 0x9b, 0xb9, 0xab, 0xeb, 0xb1, 0x28, 0x09, 0x92,
+    0x78, 0xa1, 0x48, 0x0d, 0x49, 0xf9, 0x51, 0x85, 0xf7, 0x59, 0xee, 0xb3, 0xdc, 0x27, 0xfb, 0xcd, 0xee, 0x02, 0x20,
+    0xf8, 0xd0, 0xc3, 0x4d, 0x7a, 0xf7, 0x9b, 0x36, 0x89, 0x08, 0x02, 0x4b, 0x60, 0x01, 0x2c, 0x16, 0xfb, 0xf4, 0x67,
+    0x5c, 0xf6, 0x62, 0xb6, 0xd8, 0x7e, 0x9f, 0xfb, 0xfc, 0x99, 0xd9, 0xb8, 0x24, 0x81, 0xe1, 0xb3, 0xb3, 0x78, 0x36,
+    0x0b, 0x59, 0x4b, 0x17, 0xc9, 0x43, 0x74, 0x53, 0x7e, 0xe6, 0xec, 0x91, 0x23, 0x22, 0x76, 0x1a, 0xf9, 0xa6, 0xad,
+    0x25, 0x46, 0xcc, 0x64, 0x48, 0x3b, 0xe2, 0x5c, 0x51, 0x36, 0x7b, 0x83, 0xea, 0x0d, 0x3e, 0x2f, 0xc5, 0xd6, 0xb5,
+    0x26, 0xf1, 0x6a, 0x14, 0x32, 0x0b, 0x97, 0x3b, 0x7c, 0x72, 0x3d, 0x5a, 0x8d, 0x46, 0x90, 0xa5, 0xe5, 0x91, 0x63,
+    0x42, 0xdc, 0x99, 0x38, 0xc5, 0xfb, 0x60, 0x6e, 0xf4, 0x61, 0x50, 0x76, 0x56, 0xed, 0x3e, 0xd8, 0x8a, 0x80, 0xa8,
+    0x87, 0x3e, 0x90, 0xc1, 0xdd, 0xaf, 0x61, 0xd7, 0x0e, 0xf4, 0x0f, 0xb0, 0xfa, 0x52, 0xbd, 0xdf, 0xb4, 0xf5, 0x07,
+    0x97, 0xfa, 0x07, 0xc4, 0x31, 0x66, 0x2f, 0x7e, 0x49, 0xab, 0x57, 0x37, 0x75, 0x52, 0x7a, 0xaf, 0x30, 0x8f, 0x01,
+    0x08, 0x7d, 0x5f, 0x05, 0xfe, 0x2c, 0x8a, 0xd3, 0x2c, 0x18, 0xeb, 0x57, 0xfd, 0xb7, 0x41, 0xeb, 0x72, 0x91, 0xb5,
+    0x8c, 0x2b, 0x73, 0x9c, 0xa9, 0x29, 0x50, 0x04, 0xc1, 0xc4, 0x0c, 0x28, 0x9b, 0x2a, 0xa9, 0x3b, 0x68, 0x6b, 0x45,
+    0x41, 0x9a, 0xb1, 0xd2, 0x38, 0x1b, 0x40, 0xbd, 0x4a, 0x3e, 0x15, 0x4c, 0x0c, 0xa5, 0x63, 0x4b, 0xa3, 0x4f, 0x37,
+    0x95, 0x97, 0xab, 0x35, 0x1e, 0xe5, 0x59, 0x71, 0x5a, 0x62, 0x0c, 0x60, 0xe1, 0x38, 0x43, 0xcf, 0x8f, 0x54, 0xa3,
+    0xcf, 0xd2, 0xb9, 0x3b, 0xfc, 0xae, 0xcc, 0x17, 0xc0, 0xf9, 0x0d, 0x16, 0x17, 0x51, 0x9c, 0x69, 0x10, 0xd8, 0x06,
+    0xbe, 0x38, 0xac, 0x1a, 0x89, 0x71, 0xa8, 0x2d, 0x23, 0xe7, 0xc4, 0xe0, 0x7b, 0x3c, 0xfc, 0x5a, 0x3c, 0xbc, 0x59,
+    0x29, 0x82, 0x05, 0x5d, 0x16, 0x22, 0x98, 0xc0, 0x2c, 0x3e, 0x8f, 0x6f, 0xab, 0x7a, 0x90, 0x97, 0xc3, 0xdd, 0x67,
+    0x6f, 0x4b, 0xb0, 0xc9, 0x22, 0xab, 0x5f, 0x8b, 0x27, 0x26, 0x15, 0x8c, 0x4e, 0x65, 0x4f, 0xa1, 0xe1, 0x87, 0xe0,
+    0x61, 0x32, 0xb0, 0x13, 0xc3, 0xb3, 0x00, 0x48, 0x12, 0x3f, 0xa6, 0x87, 0xf9, 0xb5, 0x48, 0x9d, 0x2c, 0x12, 0x17,
+    0x2b, 0x87, 0x33, 0x50, 0xd7, 0x68, 0xb9, 0xca, 0x30, 0xd4, 0x2e, 0x74, 0x80, 0xe5, 0xba, 0x86, 0xa1, 0x3b, 0x81,
+    0x4a, 0x17, 0x6c, 0x62, 0xae, 0x6b, 0xc1, 0xa4, 0x5e, 0xc6, 0x99, 0x5e, 0x20, 0x5e, 0x48, 0xdf, 0x51, 0x50, 0x05,
+    0x8f, 0x09, 0x1f, 0xc6, 0xd8, 0x2c, 0xe2, 0xd4, 0xb7, 0xc6, 0xa8, 0xd0, 0x69, 0xa0, 0x0c, 0x63, 0x82, 0xd3, 0x6f,
+    0x85, 0x8d, 0x83, 0x85, 0xf0, 0x9b, 0xa5, 0x61, 0x0e, 0x9f, 0xac, 0xa3, 0xfc, 0xec, 0xc9, 0x3a, 0xcd, 0x07, 0x4f,
+    0xd6, 0xbe, 0xb4, 0x15, 0xd0, 0x2f, 0x74, 0x32, 0x14, 0x18, 0x22, 0x1a, 0x86, 0xf9, 0x75, 0xe1, 0xb9, 0x53, 0x8c,
+    0x17, 0x56, 0x19, 0x95, 0x6b, 0xa8, 0xba, 0x1f, 0x70, 0x05, 0xfd, 0x32, 0x09, 0x16, 0x7e, 0x72, 0x4f, 0xfa, 0x7c,
+    0x53, 0x55, 0xfa, 0x1b, 0xba, 0x46, 0x84, 0x9e, 0x10, 0x40, 0x34, 0x5f, 0xd7, 0xfe, 0x2a, 0xcb, 0x18, 0x1f, 0xad,
+    0x54, 0x6a, 0xc2, 0xb7, 0xae, 0xf5, 0xe7, 0xcc, 0x9e, 0xb0, 0xcc, 0x0f, 0x42, 0x6a, 0xd2, 0x17, 0xd9, 0xea, 0x6b,
+    0xc3, 0x4b, 0xcb, 0xc3, 0x8b, 0xca, 0xeb, 0x07, 0x07, 0x43, 0x47, 0x00, 0xf5, 0x1b, 0x47, 0x86, 0x59, 0xac, 0x9a,
+    0x67, 0x94, 0xde, 0xfd, 0x57, 0xa7, 0x83, 0xc1, 0x74, 0x44, 0x30, 0x1d, 0x2c, 0x1a, 0xc7, 0x13, 0xf6, 0xcb, 0xfb,
+    0xb7, 0x32, 0x6d, 0x16, 0x48, 0x80, 0x86, 0x7c, 0x61, 0xa6, 0xc8, 0x3f, 0x24, 0xc8, 0x3b, 0x50, 0x82, 0x2b, 0x4d,
+    0x2e, 0xa1, 0x24, 0xd7, 0xb5, 0x33, 0xea, 0x3b, 0x9b, 0x50, 0xaf, 0x07, 0x31, 0xb6, 0x4a, 0xf2, 0x93, 0x03, 0xaa,
+    0x4d, 0xa7, 0x1d, 0x55, 0x02, 0x34, 0x24, 0x30, 0xc2, 0x02, 0x0b, 0x90, 0xe1, 0x73, 0xe0, 0x16, 0x17, 0x0a, 0x7b,
+    0x81, 0x72, 0x76, 0xf7, 0xac, 0xcc, 0xaa, 0x60, 0x2b, 0xfd, 0xf4, 0x04, 0x73, 0x76, 0xc1, 0x79, 0x0d, 0x51, 0x3e,
+    0x4e, 0x0e, 0xe8, 0x51, 0xab, 0xec, 0x88, 0x02, 0x88, 0xb8, 0xda, 0xf5, 0x38, 0x80, 0x07, 0x6d, 0x15, 0x48, 0x11,
+    0x0f, 0xa5, 0x7e, 0xae, 0x6b, 0x0b, 0xce, 0x1a, 0xf1, 0x70, 0x42, 0x10, 0x6b, 0xc0, 0x81, 0xbd, 0xab, 0x6b, 0x0b,
+    0xff, 0x0e, 0x47, 0x2e, 0xde, 0xf8, 0x77, 0x2d, 0x97, 0xbf, 0x2a, 0xf6, 0x5a, 0x5a, 0xde, 0x6b, 0x63, 0x3e, 0xb9,
+    0xe0, 0x48, 0x20, 0x6f, 0xd6, 0x73, 0x54, 0xd0, 0x36, 0x4c, 0xee, 0x5c, 0x4c, 0xee, 0x64, 0xc3, 0xe4, 0x4e, 0xb6,
+    0x4c, 0x6e, 0xc8, 0x27, 0x52, 0x93, 0xa8, 0x4b, 0xd0, 0x39, 0x4c, 0x22, 0x8f, 0x33, 0x1a, 0x3d, 0xbe, 0xcf, 0x10,
+    0x4f, 0x56, 0x1a, 0x82, 0x71, 0xd4, 0x06, 0x5c, 0x35, 0xe1, 0x45, 0x41, 0x44, 0x7d, 0xe0, 0x72, 0xd7, 0x89, 0x71,
+    0x43, 0x0e, 0xce, 0x56, 0x58, 0x1d, 0x2f, 0xac, 0x52, 0xca, 0x2f, 0xde, 0x9a, 0x6f, 0x18, 0xe9, 0x7c, 0xcb, 0x48,
+    0xc7, 0xa5, 0xad, 0xcb, 0x87, 0x4d, 0x9b, 0x50, 0x1d, 0x14, 0xac, 0x41, 0x30, 0x18, 0xc5, 0x25, 0x53, 0x5e, 0x87,
+    0x9b, 0x69, 0xac, 0xb2, 0xa2, 0x96, 0x7e, 0x9a, 0xde, 0xc6, 0x09, 0x68, 0x5c, 0x00, 0xcc, 0xc3, 0x96, 0xd4, 0x22,
+    0x88, 0x78, 0x30, 0x97, 0x8d, 0x8b, 0xa9, 0x78, 0xaf, 0x2e, 0x29, 0xaf, 0xd3, 0xa1, 0x1a, 0x4b, 0x3f, 0xcb, 0x58,
+    0x82, 0x48, 0xf7, 0x21, 0xea, 0xf7, 0xff, 0x93, 0x65, 0xd6, 0x40, 0x43, 0x42, 0x85, 0xaa, 0x23, 0x85, 0x5e, 0x02,
+    0x6f, 0x95, 0x88, 0x83, 0x58, 0x09, 0x0c, 0x97, 0x48, 0xc4, 0xff, 0x84, 0xdb, 0xb5, 0x95, 0x28, 0xae, 0x4b, 0xee,
+    0x91, 0x61, 0x2f, 0xfd, 0xc9, 0x07, 0x50, 0xec, 0xb5, 0x3c, 0x13, 0x8c, 0x74, 0xd5, 0x30, 0x70, 0x09, 0x31, 0x7b,
+    0xe3, 0x82, 0x48, 0x22, 0x95, 0xe4, 0x26, 0x50, 0xe0, 0x3d, 0xe9, 0x5b, 0xd3, 0xab, 0xb5, 0x97, 0x1f, 0xcc, 0x02,
+    0xa3, 0x46, 0x35, 0x81, 0xb4, 0x85, 0x83, 0x53, 0x79, 0xe7, 0x0a, 0x4d, 0xf7, 0xc8, 0x00, 0xc9, 0xef, 0x25, 0xe4,
+    0x33, 0x75, 0xc4, 0x85, 0x76, 0x98, 0xc0, 0xa9, 0x75, 0xe9, 0x5c, 0xe5, 0x4f, 0x67, 0xf8, 0xcb, 0xbd, 0xca, 0x9f,
+    0x8e, 0xf0, 0x97, 0x77, 0x85, 0x99, 0xeb, 0x1a, 0x2e, 0xf2, 0xca, 0x98, 0xf5, 0xd3, 0xd2, 0x7a, 0x22, 0xfb, 0xb3,
+    0x07, 0x2c, 0x1b, 0x3e, 0xc1, 0x8f, 0x9f, 0xac, 0x53, 0xf0, 0xb8, 0x54, 0xc7, 0x10, 0xd9, 0x89, 0x91, 0x37, 0x96,
+    0xcf, 0x36, 0x94, 0x8f, 0x8c, 0xff, 0xf2, 0xc1, 0x8f, 0xab, 0x24, 0x2e, 0xce, 0x94, 0xb2, 0x18, 0xe2, 0x7a, 0x14,
+    0x44, 0x7e, 0x72, 0x7f, 0x4d, 0xd7, 0x8b, 0x96, 0xe0, 0xdd, 0xa5, 0x78, 0x85, 0xd8, 0xcb, 0xb2, 0xba, 0x2b, 0x53,
+    0x04, 0xbc, 0xf7, 0xfc, 0xa0, 0x1f, 0xfc, 0x3d, 0x51, 0xd8, 0xb6, 0xd2, 0x05, 0x94, 0x4f, 0x48, 0xe9, 0x43, 0xd7,
+    0x4f, 0xd6, 0x2d, 0x56, 0x07, 0x53, 0x19, 0x6d, 0x85, 0x2f, 0x84, 0xe9, 0xc1, 0xcb, 0xec, 0x62, 0x12, 0xf4, 0x50,
+    0x9f, 0x35, 0x8a, 0xef, 0xac, 0x27, 0xeb, 0xec, 0x4c, 0x5f, 0xf8, 0xc9, 0x27, 0x36, 0xb1, 0xc6, 0x41, 0x32, 0x0e,
+    0x99, 0xde, 0xd3, 0x47, 0xa1, 0x1f, 0x7d, 0xe2, 0x8f, 0x56, 0xbc, 0xca, 0x50, 0x43, 0xbd, 0xf3, 0xee, 0x2b, 0x70,
+    0x42, 0x22, 0x3b, 0x64, 0x56, 0x1b, 0xb0, 0xa0, 0xbd, 0x94, 0x02, 0xaf, 0x82, 0x51, 0x2c, 0x6a, 0x99, 0x60, 0x60,
+    0x09, 0x4a, 0x73, 0xf0, 0x58, 0x35, 0x75, 0x9c, 0x2f, 0xdd, 0x54, 0x87, 0x4a, 0xc2, 0x4a, 0x99, 0x72, 0xf1, 0x1a,
+    0x21, 0xfc, 0xf1, 0xcf, 0x51, 0x32, 0xec, 0xfd, 0x3f, 0x27, 0xa1, 0x7c, 0xd9, 0x08, 0xa1, 0xd4, 0x22, 0x4f, 0x89,
+    0x07, 0x7c, 0x9c, 0x33, 0x98, 0x9b, 0x3f, 0xad, 0x36, 0xf6, 0xd3, 0x74, 0xb5, 0x60, 0x13, 0xd2, 0x0c, 0x9e, 0x15,
+    0x9d, 0x2a, 0xdf, 0x2c, 0xd4, 0x8e, 0xfd, 0xb6, 0xf2, 0x8e, 0x0f, 0x5f, 0x82, 0xc5, 0x02, 0x30, 0x94, 0xf1, 0x74,
+    0xaa, 0x17, 0x77, 0xfc, 0x1d, 0xcd, 0xdc, 0xc3, 0xdf, 0x56, 0x6f, 0x5e, 0x3b, 0x6f, 0x64, 0xe3, 0x08, 0x18, 0x63,
+    0xa1, 0x7e, 0xe5, 0x7c, 0xb1, 0xd2, 0x5f, 0x31, 0xa2, 0xa9, 0x1f, 0x6d, 0x1e, 0xce, 0x65, 0x69, 0x89, 0x2f, 0x19,
+    0x9b, 0x00, 0xc3, 0x6d, 0xd6, 0x4a, 0xaf, 0x43, 0x76, 0xc3, 0xa4, 0x6a, 0xb7, 0xfe, 0xb1, 0x86, 0x16, 0x18, 0x7b,
+    0x8e, 0xab, 0x8c, 0x39, 0x57, 0xa7, 0x0c, 0x69, 0x88, 0x63, 0xe0, 0x23, 0x57, 0xb7, 0x58, 0x65, 0x4b, 0x0d, 0x4d,
+    0x5d, 0xe9, 0xc0, 0xc6, 0x9e, 0x9d, 0x6d, 0x28, 0xef, 0x61, 0xe2, 0xe9, 0xe6, 0xbe, 0x99, 0xae, 0xd1, 0x83, 0x58,
+    0xdd, 0x1c, 0x4f, 0x21, 0xec, 0xbc, 0x56, 0x21, 0x0e, 0xd9, 0x84, 0xb1, 0x26, 0x21, 0x99, 0x4e, 0xd2, 0x17, 0x61,
+    0xed, 0x88, 0x66, 0xbf, 0x42, 0x0e, 0xd5, 0x38, 0x37, 0x5a, 0x79, 0xe4, 0x23, 0x4c, 0xe8, 0x1a, 0xb1, 0x34, 0xdd,
+    0x88, 0x30, 0x39, 0xe9, 0xa6, 0x5e, 0xd4, 0x2e, 0xe3, 0xa3, 0x28, 0x37, 0x1d, 0x13, 0x58, 0x02, 0x1c, 0x60, 0xf5,
+    0x5b, 0x78, 0xbc, 0x5c, 0x2f, 0xb8, 0xbd, 0x4a, 0x32, 0x1b, 0xe9, 0xdc, 0x96, 0x60, 0xd3, 0xfb, 0x5b, 0x9d, 0x77,
+    0xaa, 0x74, 0x4c, 0x37, 0x76, 0xad, 0x55, 0x22, 0xbd, 0x35, 0x71, 0x11, 0x02, 0x10, 0x7d, 0xaa, 0xd0, 0x57, 0x36,
+    0x9d, 0xb2, 0x71, 0x96, 0x1a, 0x42, 0x78, 0x24, 0xa3, 0xc7, 0x82, 0xd7, 0xd0, 0xa3, 0x81, 0xfe, 0x13, 0xf8, 0xd0,
+    0x8b, 0x20, 0x4b, 0xbc, 0x43, 0xe2, 0xce, 0xd4, 0x8c, 0x26, 0x82, 0x58, 0x46, 0x11, 0xff, 0x0a, 0x24, 0x07, 0x6f,
+    0x28, 0xc7, 0xae, 0xf1, 0xf3, 0xa7, 0x58, 0x17, 0xb1, 0xb4, 0x6a, 0xd9, 0x4e, 0x8a, 0xb6, 0x6d, 0xdf, 0xb5, 0xfb,
+    0xa6, 0xe3, 0x3a, 0xb9, 0x6e, 0x82, 0xef, 0xd6, 0xa7, 0x7d, 0x37, 0x3d, 0xb6, 0x6a, 0x43, 0xab, 0x55, 0xf4, 0x90,
+    0x76, 0x9e, 0xfb, 0xc2, 0xd5, 0x4d, 0x32, 0x99, 0x53, 0x68, 0xdb, 0x38, 0xbe, 0x61, 0xc9, 0x17, 0x0f, 0xa5, 0x0c,
+    0x7c, 0xbf, 0xfe, 0x1c, 0xb9, 0x0e, 0x10, 0xe1, 0x2c, 0x5e, 0x3e, 0x60, 0x08, 0x6d, 0xdd, 0xd4, 0xc7, 0x61, 0x9c,
+    0x32, 0x75, 0x0c, 0x24, 0x04, 0xf9, 0xc2, 0x41, 0xfc, 0xfc, 0xfe, 0xf5, 0x87, 0x0f, 0xba, 0x89, 0x99, 0x40, 0x53,
+    0x15, 0x3a, 0x5f, 0x50, 0x3b, 0xa8, 0x7f, 0xe3, 0xba, 0xa3, 0x13, 0x86, 0x2e, 0xb5, 0xe5, 0x35, 0x47, 0x65, 0xb5,
+    0x25, 0xc7, 0x4f, 0x1e, 0xfe, 0x65, 0xba, 0x89, 0xee, 0x35, 0xae, 0x06, 0xda, 0xb0, 0xfd, 0x78, 0x2b, 0x95, 0x2c,
+    0x82, 0xe8, 0xba, 0xa1, 0xd4, 0xbf, 0x6b, 0x28, 0x85, 0xab, 0x5c, 0x8d, 0x56, 0xad, 0xe2, 0x85, 0xc2, 0x1a, 0x40,
+    0x22, 0xe7, 0x5d, 0xe8, 0x52, 0xee, 0x53, 0x5f, 0xd0, 0x69, 0x1e, 0xc9, 0xbd, 0xda, 0xeb, 0x86, 0x62, 0x7e, 0x09,
+    0x92, 0xb8, 0x1d, 0x87, 0x60, 0xf0, 0xc7, 0x54, 0xad, 0x5c, 0x99, 0x6d, 0x94, 0xe6, 0xba, 0x0a, 0x10, 0x62, 0x6f,
+    0xaf, 0x33, 0xb6, 0x58, 0xb2, 0xc4, 0xcf, 0x56, 0x09, 0xbb, 0x0e, 0xe3, 0xdb, 0x47, 0x85, 0x39, 0xfd, 0x8e, 0xca,
+    0xf3, 0x60, 0x36, 0x97, 0xb5, 0xcf, 0x5a, 0x6c, 0x20, 0x27, 0x70, 0xeb, 0x07, 0xf2, 0xff, 0xfc, 0xdb, 0xb6, 0xff,
+    0xf3, 0xef, 0x9d, 0x55, 0x01, 0x7c, 0x3e, 0x34, 0xb3, 0xc1, 0x1e, 0xeb, 0xa2, 0xf9, 0x4b, 0x65, 0x9c, 0x37, 0xd7,
+    0xa9, 0x4d, 0x02, 0xbc, 0xaf, 0x4d, 0x41, 0xad, 0xb0, 0xbc, 0x6e, 0x1e, 0xd4, 0x31, 0x18, 0xd7, 0xce, 0x9e, 0x41,
+    0xa5, 0x2f, 0xea, 0xda, 0xd0, 0xe8, 0xed, 0x35, 0x23, 0x7f, 0x1c, 0xc3, 0xbb, 0xc6, 0xf0, 0x85, 0xdd, 0xe7, 0x72,
+    0xc9, 0x97, 0xc3, 0xa1, 0xcc, 0x2d, 0xa7, 0x36, 0x05, 0x13, 0xff, 0xb3, 0x5a, 0x09, 0x3f, 0x3c, 0x7b, 0x8e, 0x41,
+    0xbe, 0xf7, 0x83, 0x97, 0x43, 0x34, 0x46, 0x3b, 0x19, 0x25, 0x05, 0xb3, 0xb2, 0x91, 0xb4, 0x91, 0x31, 0x79, 0x0d,
+    0x68, 0x8d, 0xae, 0x41, 0x29, 0x26, 0x1c, 0xcb, 0x87, 0x86, 0xf9, 0x72, 0xc8, 0x05, 0x4b, 0xdc, 0xfe, 0xb5, 0x57,
+    0x5d, 0xda, 0x5c, 0x2c, 0x5b, 0x42, 0xba, 0xa9, 0x91, 0xfe, 0x07, 0x2b, 0xb3, 0x42, 0x8e, 0x87, 0x02, 0x7e, 0x90,
+    0x28, 0x0c, 0x73, 0xcc, 0x77, 0xf2, 0x6e, 0x93, 0x8d, 0xd8, 0xcf, 0xbb, 0x6d, 0xc4, 0x2e, 0xf6, 0xb2, 0x11, 0xfb,
+    0xf9, 0xab, 0xdb, 0x88, 0xbd, 0x53, 0x6d, 0xc4, 0x60, 0x12, 0x5f, 0xb3, 0xbd, 0x0c, 0xb7, 0x84, 0xd5, 0x46, 0x7c,
+    0x9b, 0x0e, 0x5c, 0xce, 0xd2, 0xa6, 0xe3, 0x39, 0x03, 0x19, 0x01, 0x9f, 0x95, 0x30, 0x9e, 0x81, 0x11, 0xd7, 0x9f,
+    0x6f, 0x6e, 0x15, 0xc6, 0x33, 0xd5, 0xd8, 0x2a, 0xe2, 0x11, 0x5f, 0x8b, 0x28, 0x4e, 0x64, 0xe0, 0xe4, 0x98, 0x22,
+    0xe6, 0x93, 0x75, 0x68, 0x28, 0x59, 0xad, 0xa5, 0xf5, 0x9a, 0x27, 0x4c, 0xa0, 0x7a, 0x68, 0x3d, 0x25, 0x1b, 0x7a,
+    0xcf, 0x45, 0x6c, 0x0b, 0x15, 0x82, 0xb4, 0x12, 0xa6, 0x38, 0x11, 0x6b, 0xfd, 0xb7, 0x3b, 0xf7, 0xfb, 0x4b, 0xb7,
+    0xdf, 0x76, 0xc1, 0x39, 0x1b, 0x6e, 0x98, 0x58, 0xe0, 0xf4, 0xdb, 0x6d, 0x28, 0xb8, 0x55, 0x0a, 0x3c, 0x28, 0x08,
+    0x94, 0x82, 0x0e, 0x14, 0x8c, 0x95, 0x82, 0x23, 0x28, 0x98, 0x28, 0x05, 0xc7, 0x50, 0x70, 0xa3, 0xe7, 0x97, 0x91,
+    0xec, 0xee, 0xb1, 0x71, 0x65, 0xd2, 0xa5, 0x42, 0x94, 0x1d, 0x9b, 0x2e, 0x58, 0x4d, 0xf9, 0xb3, 0x5e, 0x6c, 0x92,
+    0x74, 0xb1, 0x97, 0x98, 0xb7, 0x73, 0x46, 0x81, 0xa2, 0x5f, 0xe1, 0x99, 0x63, 0x67, 0x31, 0xd8, 0x4d, 0x8b, 0x00,
+    0x0c, 0x02, 0x0f, 0x9a, 0x6e, 0x80, 0xc0, 0xa8, 0x2f, 0x67, 0x4e, 0x04, 0xb1, 0x50, 0xe6, 0xb2, 0x78, 0x47, 0x9f,
+    0xb3, 0xe4, 0x12, 0x28, 0x2c, 0x4e, 0x5a, 0xaa, 0x54, 0xf2, 0x6b, 0xd8, 0x1d, 0xbc, 0x62, 0xa3, 0xd5, 0x4c, 0x3b,
+    0x8f, 0x67, 0x3b, 0x4d, 0x08, 0xd4, 0x57, 0xd0, 0x4b, 0x9d, 0xd4, 0x2f, 0x96, 0x58, 0x96, 0xfc, 0x5b, 0xf4, 0x98,
+    0x97, 0xeb, 0x67, 0xd0, 0x37, 0x2d, 0x23, 0x03, 0x16, 0xf8, 0x0e, 0xe0, 0x48, 0xd1, 0xe1, 0x9f, 0x03, 0x9e, 0x95,
+    0xe7, 0x0b, 0x5f, 0xe9, 0xcf, 0xe9, 0x8f, 0x2c, 0x4d, 0xfd, 0x99, 0xa8, 0x5f, 0xef, 0x27, 0x18, 0xed, 0xc8, 0xfb,
+    0x17, 0x22, 0x10, 0x24, 0x79, 0x41, 0xcd, 0x36, 0x23, 0x89, 0x6f, 0x35, 0xb0, 0xfe, 0x81, 0x05, 0x55, 0xd8, 0x29,
+    0x04, 0x36, 0x4c, 0x61, 0xd9, 0xa2, 0x00, 0x36, 0xff, 0x0d, 0x0b, 0xab, 0x85, 0x99, 0x3f, 0xab, 0x16, 0xd1, 0x3a,
+    0xc8, 0xd5, 0xbe, 0x49, 0x85, 0x7e, 0xa9, 0xf0, 0x4b, 0x34, 0xd4, 0x61, 0x3c, 0xfb, 0x53, 0xd5, 0xd3, 0x5b, 0xcc,
+    0x0a, 0x3e, 0x44, 0x66, 0x90, 0x0d, 0x6d, 0xc4, 0xb1, 0x66, 0x03, 0x0a, 0x7b, 0x51, 0x36, 0xb7, 0xd0, 0xb5, 0xac,
+    0xe5, 0x45, 0x86, 0x69, 0xe3, 0xdc, 0xae, 0xab, 0x0e, 0xb5, 0xbd, 0x64, 0x36, 0xf2, 0x5b, 0xae, 0x77, 0x6c, 0x8a,
+    0x3f, 0xb6, 0xd3, 0x31, 0x72, 0x84, 0xa0, 0x4d, 0x82, 0x9b, 0xf5, 0x34, 0x8e, 0x32, 0x6b, 0xea, 0x2f, 0x82, 0xf0,
+    0xbe, 0xb7, 0x88, 0xa3, 0x38, 0x5d, 0xfa, 0x63, 0xd6, 0x2f, 0x2e, 0xd4, 0x7d, 0x0c, 0xd5, 0xc0, 0xbd, 0x05, 0x5d,
+    0xdb, 0x4b, 0xd8, 0x82, 0x5a, 0xcb, 0x48, 0x0c, 0xd3, 0x90, 0xdd, 0xe5, 0xfc, 0xf3, 0xa5, 0xca, 0x54, 0x15, 0x97,
+    0x1c, 0xb5, 0x00, 0x8e, 0x94, 0x87, 0x79, 0x80, 0xe0, 0x46, 0xfd, 0xa5, 0x3f, 0xc1, 0xc8, 0x84, 0xb6, 0xd7, 0x49,
+    0xd8, 0x42, 0xb3, 0x3b, 0x1b, 0x81, 0x27, 0xf1, 0xed, 0x29, 0xf4, 0x16, 0x1b, 0x5b, 0x29, 0x0b, 0xa7, 0xf8, 0xc6,
+    0x42, 0xcf, 0x12, 0x01, 0xc7, 0xc2, 0x8b, 0x38, 0x40, 0x63, 0x8b, 0x3e, 0xbc, 0xee, 0x79, 0x9a, 0xd3, 0x5f, 0x04,
+    0x91, 0x45, 0xc3, 0x39, 0x76, 0x96, 0x0a, 0x2c, 0x15, 0x7f, 0xc6, 0x1a, 0xab, 0xbb, 0x9a, 0xd3, 0x87, 0xcb, 0xda,
+    0x34, 0x8c, 0x6f, 0x7b, 0xf3, 0x60, 0x32, 0x61, 0x51, 0x1f, 0xfb, 0x2c, 0x0b, 0x59, 0x18, 0x06, 0xcb, 0x34, 0x48,
+    0xfb, 0x0b, 0xff, 0x8e, 0x43, 0x3d, 0xdc, 0x04, 0xb5, 0xcd, 0xa1, 0xb6, 0xf7, 0x86, 0xaa, 0x80, 0x01, 0x2f, 0x16,
+    0x82, 0xc3, 0xbb, 0xd6, 0xd1, 0x9c, 0xca, 0x38, 0xf7, 0x86, 0xba, 0x4c, 0xd8, 0x7a, 0xe1, 0x27, 0xb3, 0x20, 0xea,
+    0x39, 0xb9, 0x7d, 0xb3, 0xa6, 0x85, 0xf1, 0xb8, 0xdb, 0xed, 0xe6, 0xf6, 0x44, 0x3c, 0x39, 0x93, 0x49, 0x6e, 0x8f,
+    0xc5, 0xd3, 0x74, 0xea, 0x38, 0xd3, 0x69, 0x6e, 0x07, 0xa2, 0xa0, 0xed, 0x8d, 0x27, 0x6d, 0x2f, 0xb7, 0x6f, 0x95,
+    0x1a, 0xb9, 0xcd, 0xf8, 0x53, 0xc2, 0x26, 0x7d, 0x5c, 0x48, 0x64, 0x56, 0xda, 0x3b, 0x76, 0x9c, 0x1c, 0x29, 0xc0,
+    0x65, 0x89, 0x36, 0xa1, 0xac, 0xe7, 0x6a, 0xbd, 0x77, 0x4d, 0xad, 0xf8, 0xdc, 0x78, 0xdc, 0x58, 0x6f, 0xe2, 0x27,
+    0x9f, 0xae, 0x34, 0x65, 0x14, 0xbe, 0x4f, 0xd5, 0xd6, 0x02, 0x0d, 0xd6, 0x5d, 0x0f, 0x42, 0x76, 0xf5, 0x47, 0x71,
+    0x02, 0x7b, 0x36, 0xf1, 0x27, 0xc1, 0x2a, 0xed, 0xb9, 0xde, 0xf2, 0x4e, 0x14, 0xf1, 0xb5, 0x5e, 0x14, 0xe0, 0xde,
+    0xeb, 0xa5, 0x71, 0x18, 0x4c, 0x44, 0xd1, 0xa6, 0xbd, 0xe4, 0x7a, 0x46, 0x1f, 0x1d, 0xd6, 0x03, 0x0c, 0xbb, 0xe0,
+    0x87, 0xa1, 0x66, 0xb7, 0x53, 0x8d, 0xf9, 0x29, 0xca, 0x97, 0x35, 0x27, 0x25, 0xbc, 0xa0, 0x73, 0xba, 0x7b, 0xb8,
+    0xbc, 0x93, 0x6b, 0xde, 0x3d, 0x5a, 0xde, 0xe5, 0x7f, 0x5d, 0xb0, 0x49, 0xe0, 0x6b, 0xad, 0x62, 0x35, 0xb9, 0x0e,
+    0xc8, 0xa0, 0x8d, 0xf5, 0x86, 0x65, 0x2a, 0xb6, 0x05, 0x84, 0x36, 0x7c, 0x14, 0x2c, 0x96, 0x71, 0x92, 0xf9, 0x51,
+    0x96, 0xe7, 0xc3, 0xab, 0x3c, 0xef, 0x5f, 0x04, 0xad, 0xcb, 0x7f, 0xb4, 0xe8, 0x9c, 0x26, 0x9d, 0x4d, 0x6e, 0x5c,
+    0x99, 0xaf, 0x99, 0x6a, 0x33, 0x02, 0xc7, 0x18, 0xda, 0x8b, 0xa8, 0x95, 0xe9, 0x94, 0xac, 0x57, 0x26, 0x24, 0xcb,
+    0xea, 0x64, 0x83, 0x52, 0xae, 0x82, 0x27, 0x10, 0x54, 0x78, 0xcd, 0x06, 0x17, 0x8a, 0xfd, 0x09, 0x30, 0x2b, 0x58,
+    0x99, 0xfc, 0x0a, 0x9e, 0x6c, 0xe2, 0x19, 0xbf, 0xdb, 0xcd, 0x33, 0xfe, 0x9a, 0xed, 0xc3, 0x33, 0x7e, 0xf7, 0xd5,
+    0x79, 0xc6, 0x27, 0x75, 0xbf, 0x82, 0xb7, 0xf1, 0x40, 0x97, 0x1a, 0x06, 0x38, 0x9a, 0x12, 0x8a, 0xd8, 0xf3, 0xf6,
+    0x0f, 0xbb, 0x01, 0x08, 0x68, 0x94, 0x83, 0x8e, 0x4e, 0x6e, 0x90, 0xc7, 0xbe, 0x8b, 0x06, 0x7f, 0x4f, 0xd4, 0xe7,
+    0xe9, 0x74, 0xf0, 0x2a, 0x56, 0x0a, 0xe4, 0x13, 0x37, 0xbe, 0x28, 0x45, 0x57, 0xa0, 0x37, 0xc2, 0x0a, 0x13, 0xf3,
+    0x4f, 0x80, 0x73, 0x36, 0x59, 0x1d, 0x4f, 0xa4, 0xf5, 0x59, 0xbf, 0xdc, 0x85, 0x96, 0x34, 0xf9, 0x14, 0x2e, 0x38,
+    0x35, 0x51, 0xe2, 0x8c, 0x65, 0xdc, 0x67, 0xf6, 0xfb, 0xfb, 0xb7, 0x93, 0xd6, 0xdb, 0xd8, 0xc8, 0x83, 0xf4, 0x5d,
+    0xd5, 0x01, 0x86, 0xeb, 0x7e, 0x06, 0xea, 0x70, 0x72, 0x6e, 0x41, 0xa6, 0x26, 0x98, 0x86, 0xd7, 0xd4, 0xfc, 0xac,
+    0x34, 0xd2, 0x9e, 0xda, 0x90, 0x27, 0xba, 0xaa, 0x1d, 0xc6, 0xdc, 0xfb, 0x60, 0xcd, 0x39, 0x40, 0xcc, 0xdd, 0x85,
+    0x7e, 0xc3, 0x13, 0x6a, 0x1e, 0x4c, 0xf2, 0xdc, 0xe8, 0x0b, 0x44, 0x28, 0x07, 0x2d, 0xdb, 0xc5, 0xc4, 0xa5, 0xb7,
+    0xd2, 0xa6, 0x81, 0x6b, 0x08, 0x49, 0xfd, 0xf7, 0x16, 0x14, 0xea, 0x5c, 0x59, 0xc8, 0x71, 0xa6, 0x6b, 0x84, 0x3e,
+    0x32, 0xb4, 0x50, 0x06, 0x04, 0x1a, 0x60, 0x89, 0x7f, 0xf1, 0x4a, 0x14, 0xd4, 0x6d, 0x38, 0x09, 0x39, 0x68, 0x11,
+    0x00, 0x5e, 0xfe, 0x42, 0xae, 0x4d, 0x64, 0x87, 0xd7, 0xc1, 0x87, 0x5c, 0x97, 0xbc, 0x1f, 0x2e, 0xbf, 0xd3, 0x93,
+    0x03, 0x68, 0x70, 0x5a, 0x31, 0x1c, 0xd8, 0x61, 0xa1, 0x08, 0xac, 0x44, 0x7a, 0x6b, 0xda, 0xe9, 0xad, 0xf6, 0x6c,
+    0x2d, 0x22, 0x64, 0x64, 0xfe, 0xd2, 0x82, 0x2b, 0x3e, 0xd2, 0x5e, 0x4e, 0xf1, 0x94, 0x60, 0x1c, 0xfd, 0x55, 0x0a,
+    0xb4, 0x11, 0x2f, 0xaa, 0x48, 0x7f, 0xfa, 0xe3, 0x55, 0x92, 0xc6, 0x49, 0x6f, 0x19, 0x07, 0x51, 0xc6, 0x92, 0x1c,
+    0x51, 0x75, 0x89, 0xf8, 0x11, 0xe8, 0xb9, 0x5a, 0xc7, 0x4b, 0x7f, 0x1c, 0x64, 0xf7, 0x3d, 0x87, 0xb3, 0x14, 0x4e,
+    0x9f, 0x73, 0x07, 0x4e, 0x63, 0xfd, 0x1e, 0xc7, 0xe6, 0x73, 0x64, 0xfc, 0x92, 0x3a, 0x3b, 0xa3, 0x2e, 0xf3, 0xbe,
+    0xf2, 0x96, 0x62, 0x84, 0x00, 0xfb, 0xe1, 0x27, 0xd6, 0x0c, 0xa8, 0x3c, 0x4c, 0xb5, 0x33, 0x61, 0x33, 0x13, 0xa9,
+    0x36, 0xc8, 0xe5, 0xc5, 0x1f, 0xbb, 0x63, 0x68, 0x4e, 0x73, 0x31, 0x70, 0x3c, 0xc6, 0x3e, 0x3d, 0xeb, 0xf9, 0x90,
+    0x51, 0xcb, 0xdc, 0xa7, 0xe6, 0x88, 0x4d, 0xe3, 0x84, 0x51, 0x3c, 0x59, 0xb7, 0xbb, 0xbc, 0xdb, 0x1f, 0xfc, 0xf6,
+    0xe1, 0x37, 0xc3, 0x89, 0xe2, 0xac, 0x25, 0x80, 0x19, 0x3b, 0xa0, 0xd5, 0xcf, 0x33, 0x60, 0x0d, 0x09, 0xf3, 0x63,
+    0x0a, 0xdd, 0xd5, 0xd3, 0xf5, 0x7e, 0x63, 0xd8, 0xae, 0x65, 0xcc, 0xcf, 0xbc, 0x84, 0x85, 0x7e, 0x16, 0xdc, 0x08,
+    0x9e, 0xb1, 0x7d, 0xb4, 0xbc, 0x13, 0x73, 0x8c, 0x07, 0xde, 0x03, 0x26, 0xa9, 0xd2, 0x15, 0x31, 0x49, 0xd5, 0x62,
+    0x9c, 0xa4, 0x7e, 0x6d, 0x34, 0x22, 0x92, 0x45, 0xe5, 0xa4, 0xef, 0x2c, 0xef, 0xd4, 0x23, 0xba, 0x68, 0x26, 0x4f,
+    0xea, 0x6a, 0x08, 0xb2, 0x45, 0x30, 0x99, 0x84, 0x2c, 0x2f, 0x4d, 0x74, 0x79, 0x2e, 0x15, 0xe4, 0x48, 0x3c, 0xf8,
+    0xa3, 0x34, 0x0e, 0x57, 0x19, 0x6b, 0x46, 0x17, 0x21, 0xc7, 0x73, 0x0a, 0xe4, 0xe0, 0xef, 0x72, 0x5f, 0x3b, 0xc0,
+    0x6e, 0xc3, 0x32, 0x71, 0xfa, 0x10, 0x71, 0xd8, 0x6a, 0x97, 0xbb, 0x0e, 0xaf, 0x64, 0xa7, 0xcd, 0x86, 0x81, 0x98,
+    0x70, 0x2c, 0x11, 0xf5, 0xd6, 0x6c, 0x97, 0x97, 0xc9, 0xa8, 0xab, 0xb2, 0x28, 0x2f, 0x0f, 0xe6, 0xcf, 0xd9, 0x63,
+    0x2f, 0x9a, 0xf7, 0xd8, 0x0b, 0xb1, 0xc7, 0xb6, 0xaf, 0xcc, 0xc7, 0x53, 0x17, 0xfe, 0xeb, 0x17, 0x03, 0xea, 0x39,
+    0x5a, 0x7b, 0x79, 0xa7, 0xb9, 0xcb, 0x3b, 0xcd, 0xf2, 0x96, 0x77, 0x1a, 0x82, 0x46, 0x7b, 0x10, 0xd3, 0xf6, 0x0c,
+    0xd3, 0xd1, 0xa0, 0x10, 0xfe, 0x38, 0xa5, 0x57, 0xee, 0x21, 0xbc, 0x83, 0x56, 0x9d, 0xfa, 0x3b, 0x6f, 0xfb, 0x56,
+    0xa7, 0xbd, 0x24, 0x88, 0xb6, 0x61, 0x67, 0xfe, 0x68, 0xc4, 0x26, 0xbd, 0x69, 0x3c, 0x5e, 0xa5, 0xff, 0xe2, 0xfd,
+    0xe7, 0x48, 0xdc, 0x4a, 0x08, 0x2a, 0x70, 0x44, 0x53, 0x50, 0x94, 0xdc, 0x30, 0x01, 0x61, 0x2d, 0xe7, 0xa9, 0x47,
+    0xe1, 0x91, 0x3d, 0xfb, 0xb0, 0x61, 0x91, 0x37, 0x23, 0xfa, 0x4f, 0x9b, 0xa5, 0xcd, 0x24, 0xe6, 0x0b, 0xd0, 0xb2,
+    0x15, 0x1d, 0x0f, 0xc7, 0x06, 0x9f, 0x4d, 0xa7, 0xdb, 0xdc, 0xdd, 0x4b, 0xf1, 0xa5, 0x2b, 0x71, 0xa8, 0xf0, 0x73,
+    0x8b, 0x3b, 0xa6, 0x6c, 0x87, 0xba, 0x69, 0x8d, 0xd4, 0xa0, 0x6e, 0x39, 0x10, 0x8a, 0xba, 0x7b, 0x52, 0xf9, 0xc7,
+    0x2f, 0x0e, 0xe1, 0x3f, 0xe2, 0xea, 0x7f, 0xcd, 0x9a, 0x18, 0xf5, 0xb7, 0x65, 0x4b, 0x70, 0x62, 0x95, 0x90, 0x11,
+    0xdf, 0xbf, 0xfe, 0x74, 0xfa, 0xb0, 0x06, 0x7b, 0xd7, 0x26, 0x53, 0xaa, 0x6a, 0xed, 0xef, 0xe3, 0x18, 0x52, 0x77,
+    0xd6, 0xab, 0x0b, 0xf4, 0x90, 0xb1, 0x7b, 0x36, 0x80, 0x46, 0xe2, 0x1e, 0x41, 0x5a, 0x7c, 0x1d, 0xdb, 0xd0, 0x55,
+    0xe2, 0xf5, 0xa6, 0xab, 0xc4, 0xab, 0xdd, 0x57, 0x89, 0x1f, 0xf6, 0xba, 0x4a, 0xbc, 0xfa, 0xea, 0x57, 0x89, 0xd7,
+    0xf5, 0xab, 0xc4, 0x45, 0x2c, 0xec, 0x67, 0xcd, 0xb7, 0x2b, 0xfe, 0xf3, 0x23, 0x29, 0xe5, 0xce, 0xe3, 0x41, 0xc7,
+    0xa1, 0x90, 0xc7, 0x17, 0x7f, 0xf8, 0x62, 0x81, 0x0b, 0xf1, 0x3d, 0x9a, 0x93, 0x15, 0x57, 0x0b, 0x4e, 0xd9, 0xf1,
+    0x3b, 0x4a, 0x71, 0x18, 0x47, 0xb3, 0x9f, 0x41, 0x29, 0x0b, 0xe2, 0xc0, 0x44, 0x79, 0x11, 0xa4, 0x3f, 0xc7, 0xcb,
+    0xd5, 0xf2, 0x2d, 0xc0, 0xfa, 0x18, 0xa4, 0xc1, 0x28, 0x64, 0xd2, 0x13, 0x99, 0xcc, 0xdf, 0xb8, 0x4c, 0x1c, 0x2c,
+    0x4e, 0xc5, 0x4f, 0xff, 0x4e, 0xfc, 0x44, 0x9b, 0x54, 0xfe, 0x9b, 0xec, 0xea, 0xf4, 0xe6, 0x8b, 0x88, 0x50, 0x02,
+    0x2a, 0x9d, 0x7e, 0xf8, 0x65, 0xe4, 0x22, 0x36, 0x1a, 0x46, 0x29, 0xec, 0x1d, 0x36, 0xc2, 0x61, 0xb5, 0x4b, 0xcd,
+    0xca, 0x30, 0x65, 0x08, 0xae, 0xba, 0x18, 0x7e, 0x11, 0xaf, 0x52, 0x36, 0x89, 0x6f, 0x23, 0xdd, 0x8c, 0xa4, 0x93,
+    0x01, 0x68, 0x38, 0x65, 0x1b, 0x4c, 0x1e, 0xf9, 0x01, 0x19, 0xe5, 0x38, 0x69, 0xe9, 0x90, 0xbb, 0x74, 0xb5, 0xb4,
+    0x48, 0xd5, 0x6c, 0xe1, 0x10, 0x75, 0x99, 0xe5, 0xe8, 0x51, 0xab, 0x15, 0x0f, 0x1e, 0xd6, 0x52, 0x98, 0x6a, 0xc4,
+    0x36, 0x97, 0x0a, 0xa7, 0xad, 0x48, 0x08, 0x17, 0x45, 0x1c, 0x8c, 0x86, 0x89, 0xe3, 0x6f, 0xc8, 0x75, 0xb5, 0x78,
+    0x0b, 0x51, 0x44, 0xf2, 0x15, 0x9f, 0x0f, 0x1e, 0x15, 0x82, 0x1e, 0x5f, 0x2a, 0x68, 0x7c, 0x77, 0xc3, 0x92, 0xd0,
+    0xbf, 0x6f, 0x19, 0x79, 0x1c, 0xfd, 0x08, 0x08, 0x78, 0x15, 0xdf, 0x46, 0x6a, 0x05, 0x4c, 0xd6, 0xd2, 0xb0, 0x96,
+    0x1a, 0xe3, 0x97, 0x80, 0xe3, 0x8a, 0xd2, 0x03, 0x48, 0x93, 0x3b, 0x63, 0x7f, 0x37, 0xe9, 0xdf, 0x7f, 0x18, 0xb9,
+    0x79, 0x1e, 0xcb, 0x0f, 0xfd, 0xb2, 0xdc, 0xe3, 0x33, 0x4f, 0x9f, 0x3e, 0xda, 0x3c, 0xec, 0x72, 0x7a, 0xf6, 0x86,
+    0xd6, 0xc6, 0xc6, 0x5d, 0x00, 0xbd, 0xb8, 0x88, 0x57, 0xe3, 0x39, 0x1a, 0xba, 0x7e, 0xbd, 0xf1, 0x66, 0x00, 0x13,
+    0xb3, 0x94, 0xca, 0xa1, 0x57, 0x8a, 0x0a, 0x2c, 0xe0, 0xf7, 0x5f, 0x43, 0x00, 0xce, 0xff, 0x21, 0x1a, 0xea, 0xab,
+    0x86, 0xdf, 0xe2, 0x83, 0x87, 0x2d, 0xde, 0x3e, 0x24, 0xd3, 0xe4, 0xa1, 0x2d, 0x84, 0x72, 0xad, 0x99, 0xc8, 0xe4,
+    0x55, 0xa4, 0xa9, 0x61, 0xe4, 0x36, 0x45, 0xc8, 0x13, 0x5f, 0x61, 0x36, 0x5d, 0xd3, 0xb9, 0xa3, 0x81, 0xc9, 0x38,
+    0xb5, 0xaa, 0x10, 0x19, 0x6e, 0xf2, 0xc0, 0x90, 0x7c, 0x55, 0xdf, 0x2d, 0x82, 0xc8, 0xc4, 0x28, 0xf0, 0xf5, 0x37,
+    0xfe, 0x1d, 0xc4, 0x41, 0x06, 0xe2, 0x56, 0x7d, 0x05, 0x85, 0xa6, 0xea, 0x37, 0x07, 0xa9, 0x9e, 0xf4, 0x46, 0x4c,
+    0x08, 0x2d, 0xde, 0xf0, 0x1b, 0x4d, 0xd3, 0x34, 0x79, 0x8d, 0xd0, 0xe4, 0x3d, 0x02, 0xcb, 0xf1, 0x3a, 0x00, 0xda,
+    0x92, 0x7c, 0x79, 0x47, 0x25, 0x70, 0x33, 0x40, 0x9d, 0xac, 0x28, 0xe0, 0xa1, 0xfe, 0x3a, 0x8e, 0x28, 0x10, 0x17,
+    0x7a, 0x08, 0xd3, 0xe6, 0x27, 0x10, 0x11, 0xb8, 0xa7, 0xe1, 0x85, 0x1d, 0xdf, 0x72, 0x49, 0xb0, 0xe6, 0xd0, 0xe3,
+    0xb0, 0xcf, 0x9a, 0x63, 0xc2, 0x45, 0x0a, 0x15, 0x04, 0xad, 0x43, 0x25, 0xc4, 0xb3, 0xc9, 0x1a, 0x68, 0x23, 0xde,
+    0x8b, 0xee, 0xb2, 0x05, 0x8b, 0x56, 0x3a, 0xe6, 0x84, 0xc2, 0x18, 0x7d, 0x50, 0xe7, 0x15, 0x31, 0x5b, 0x40, 0x6d,
+    0x9a, 0x5b, 0xce, 0xe9, 0x2c, 0x4c, 0x39, 0x49, 0xf5, 0xcd, 0x31, 0x57, 0x6c, 0xa6, 0x9c, 0xb6, 0x55, 0x4f, 0x08,
+    0x3e, 0xa5, 0x71, 0xd5, 0x91, 0x8b, 0x2c, 0xa1, 0x01, 0x06, 0x45, 0xc7, 0xe0, 0xe2, 0x22, 0x81, 0xf6, 0x96, 0x5f,
+    0x9d, 0x34, 0xa9, 0x91, 0xf1, 0x2b, 0x82, 0xa2, 0xc4, 0xa8, 0x83, 0xe1, 0xfd, 0x84, 0xc0, 0x44, 0x1b, 0xe1, 0x8c,
+    0x6b, 0x70, 0x36, 0x0c, 0xfa, 0x13, 0xbb, 0xa7, 0x83, 0x84, 0x50, 0xf5, 0x89, 0xdd, 0x83, 0xed, 0xdf, 0x6b, 0x90,
+    0xa6, 0xe8, 0x5b, 0xc8, 0xb5, 0x09, 0xa1, 0xfe, 0xc7, 0x10, 0xac, 0x6a, 0xcb, 0x06, 0x72, 0xf2, 0x2d, 0x54, 0x1c,
+    0x51, 0x0c, 0x59, 0x9d, 0xc5, 0x26, 0xe6, 0x26, 0xfe, 0xad, 0x46, 0x1c, 0x5b, 0x0d, 0x5b, 0xc3, 0x78, 0xe6, 0x3a,
+    0xce, 0x41, 0xad, 0x3e, 0x08, 0xb2, 0x9b, 0x6a, 0x1b, 0x66, 0x36, 0x70, 0x1d, 0x2b, 0x78, 0x66, 0x7b, 0xfd, 0xda,
+    0x19, 0xad, 0xc4, 0x92, 0x1c, 0xa2, 0xf8, 0xeb, 0xf4, 0xc9, 0xba, 0x55, 0xdb, 0x90, 0x46, 0xd5, 0x64, 0x1e, 0xfb,
+    0x96, 0x73, 0xf9, 0xd7, 0xb0, 0x7e, 0xf4, 0x53, 0x24, 0x4b, 0xca, 0x6b, 0x32, 0x84, 0x68, 0xc8, 0x2d, 0xd8, 0x46,
+    0x7f, 0xd1, 0x9e, 0x6b, 0x2d, 0xda, 0x3e, 0x86, 0x31, 0x94, 0xe9, 0xb2, 0x85, 0x4f, 0x99, 0x0a, 0xa0, 0xf2, 0xc5,
+    0xb4, 0x4a, 0xe1, 0x78, 0xdc, 0x55, 0x56, 0x68, 0xf4, 0xb6, 0x72, 0x0b, 0x08, 0x7f, 0xc3, 0xf1, 0x69, 0x8f, 0x20,
+    0x2e, 0x01, 0xd4, 0x80, 0xd8, 0xe9, 0x3b, 0x01, 0xae, 0x96, 0x65, 0x70, 0xe5, 0x43, 0x72, 0x7f, 0x60, 0x78, 0xe8,
+    0xa0, 0x0e, 0x4d, 0xc2, 0x6b, 0x3e, 0xee, 0x1e, 0x08, 0x92, 0x45, 0x93, 0x32, 0xc0, 0xca, 0xf9, 0xb5, 0x3f, 0xb8,
+    0x12, 0x45, 0x81, 0xa4, 0x02, 0x71, 0x03, 0x45, 0xc9, 0xe3, 0x08, 0x17, 0x3f, 0x6d, 0xb7, 0x60, 0x2f, 0x2e, 0x06,
+    0x1b, 0x50, 0x44, 0x30, 0xd9, 0x4c, 0x11, 0x8a, 0x43, 0xe4, 0x6a, 0x74, 0x0b, 0x6e, 0x09, 0x46, 0x74, 0xe3, 0x4a,
+    0xcc, 0x84, 0x4d, 0x61, 0xd1, 0x26, 0xe0, 0xb1, 0x28, 0xf7, 0x95, 0x5a, 0x07, 0xbb, 0xa5, 0xd6, 0xd9, 0x2e, 0xa9,
+    0x35, 0xb9, 0x53, 0xdd, 0x26, 0xfe, 0x52, 0xf1, 0xc8, 0x13, 0xcc, 0xb9, 0xea, 0x98, 0x57, 0x12, 0x75, 0xa3, 0xf7,
+    0x95, 0x68, 0x55, 0x83, 0x46, 0x56, 0x82, 0x28, 0xfe, 0x56, 0x2e, 0x28, 0x42, 0xa1, 0xae, 0xca, 0xc6, 0x2f, 0x0a,
+    0xd9, 0x38, 0xdd, 0x6a, 0x0a, 0x47, 0x1a, 0xc1, 0xfd, 0x2b, 0x4e, 0x6a, 0xf2, 0x76, 0x50, 0x38, 0xab, 0x15, 0x3d,
+    0x55, 0xdc, 0xaf, 0x8a, 0x8b, 0x86, 0xe2, 0xd4, 0x27, 0x6e, 0x19, 0x65, 0xdf, 0xbe, 0x72, 0xd5, 0xc2, 0xfb, 0xaa,
+    0x28, 0x07, 0xa9, 0x3b, 0x76, 0x59, 0x16, 0xab, 0xcb, 0xa6, 0xec, 0x7e, 0xa3, 0xbe, 0x56, 0x16, 0x89, 0xf4, 0x93,
+    0x21, 0x04, 0x0b, 0x31, 0x7d, 0x45, 0xaf, 0x2d, 0x6d, 0x20, 0xb0, 0x93, 0x0d, 0x6e, 0x7d, 0xbb, 0xa5, 0xf3, 0x94,
+    0x2f, 0xa1, 0xd0, 0xc2, 0xab, 0x32, 0x08, 0xc4, 0xef, 0xd5, 0xba, 0xe1, 0x94, 0xc7, 0x43, 0x9e, 0x9f, 0xef, 0x20,
+    0x5e, 0xd4, 0x1c, 0x55, 0x91, 0x8f, 0x3b, 0xd3, 0x22, 0xf3, 0x5c, 0xac, 0x5a, 0x07, 0x4a, 0x42, 0x9c, 0x35, 0xf7,
+    0x8c, 0x29, 0xcb, 0xe8, 0x79, 0x8d, 0x9e, 0xf8, 0x2e, 0x5f, 0x3a, 0xc9, 0x2a, 0xc2, 0xd8, 0xf6, 0x56, 0x96, 0xf8,
+    0xe3, 0x4f, 0x4a, 0x97, 0x85, 0x9c, 0x13, 0x64, 0xc0, 0x65, 0x4d, 0x41, 0xdf, 0xc7, 0x50, 0x90, 0xac, 0x67, 0x7b,
+    0xa9, 0x22, 0x7d, 0xe9, 0x3d, 0x76, 0xda, 0xfe, 0x8b, 0xe9, 0x61, 0x45, 0x28, 0xea, 0x75, 0xca, 0x22, 0xf3, 0x0d,
+    0xfd, 0xc8, 0xe6, 0xab, 0xc5, 0x68, 0xad, 0xca, 0x56, 0x15, 0x91, 0x6b, 0x5d, 0xcc, 0xaa, 0x7e, 0x76, 0x3a, 0x9d,
+    0x96, 0x05, 0x8d, 0x8e, 0x76, 0x88, 0xc2, 0xc2, 0xc7, 0x8e, 0xe3, 0x54, 0xfb, 0xbe, 0x1d, 0xed, 0x16, 0xca, 0x6d,
+    0xbb, 0x8d, 0x3d, 0x46, 0xdc, 0xee, 0xc2, 0x5f, 0x1d, 0x1d, 0xb9, 0x5d, 0xec, 0xec, 0x92, 0x59, 0x44, 0x9f, 0x8c,
+    0x21, 0x82, 0x8c, 0x2d, 0xd2, 0xde, 0x98, 0xa1, 0x0e, 0xc6, 0x56, 0x36, 0x34, 0x1a, 0x0e, 0x58, 0x33, 0x30, 0x15,
+    0x71, 0xc5, 0xaa, 0x70, 0x34, 0x94, 0x87, 0xd7, 0x84, 0xf7, 0xe2, 0x23, 0xb8, 0x51, 0xd6, 0x75, 0x99, 0x36, 0x0e,
+    0xab, 0xe3, 0xfc, 0xa5, 0x54, 0x4f, 0x83, 0x03, 0x70, 0x2d, 0x14, 0xda, 0x24, 0x9f, 0xc5, 0xbf, 0xa5, 0xfc, 0xff,
+    0xc5, 0xf2, 0xae, 0x6c, 0x3f, 0xd2, 0x05, 0x89, 0x76, 0xb1, 0x5b, 0xa8, 0xd7, 0x4d, 0x6b, 0x40, 0x5a, 0x19, 0x4c,
+    0x55, 0x05, 0x3a, 0x28, 0xe9, 0x4b, 0x09, 0x40, 0x1a, 0xc4, 0xef, 0xc8, 0x31, 0xc3, 0x14, 0x17, 0x22, 0xc4, 0x22,
+    0x7d, 0x1d, 0x8c, 0xc1, 0x7c, 0xde, 0x45, 0xfd, 0x41, 0x69, 0x4d, 0x80, 0x36, 0xbe, 0x36, 0xb6, 0xbd, 0xc4, 0xfd,
+    0x55, 0xbd, 0x96, 0x00, 0x0c, 0x28, 0x73, 0x61, 0x13, 0xa2, 0x21, 0x81, 0x56, 0x59, 0xdc, 0xd4, 0x4b, 0xf9, 0x56,
+    0xd5, 0xb3, 0x89, 0x8e, 0x21, 0xb8, 0xe6, 0x2a, 0x04, 0x5b, 0x68, 0x0b, 0x60, 0xb0, 0x7c, 0xf9, 0xe1, 0xb3, 0x05,
+    0x53, 0xac, 0xae, 0x47, 0x17, 0xa7, 0x1c, 0xd7, 0xaf, 0x85, 0x67, 0x67, 0x4a, 0xfb, 0x1f, 0xe5, 0x8b, 0x3f, 0x34,
+    0x0a, 0xf4, 0x2e, 0x4a, 0x12, 0x3a, 0x6e, 0x2d, 0xee, 0x19, 0x7b, 0xd5, 0x5e, 0x04, 0xd1, 0xfe, 0x75, 0xfd, 0xbb,
+    0xbd, 0xeb, 0xc2, 0x81, 0xb1, 0x77, 0x65, 0x38, 0x71, 0xc8, 0x72, 0x21, 0x1b, 0xfc, 0xa0, 0x08, 0x14, 0x55, 0xaf,
+    0x63, 0x1d, 0x5b, 0x11, 0x97, 0x7f, 0xb1, 0x1a, 0x0c, 0x4f, 0xce, 0xee, 0x16, 0xa1, 0x76, 0xc3, 0x12, 0x48, 0xed,
+    0x33, 0xd0, 0x5d, 0xdb, 0xd1, 0x35, 0xf4, 0xa1, 0x0d, 0xa2, 0xd9, 0x40, 0xff, 0xe5, 0xe2, 0x8d, 0xd5, 0xd5, 0xcf,
+    0x40, 0x45, 0x7b, 0x33, 0xc3, 0x63, 0xef, 0xdc, 0xbf, 0x67, 0xc9, 0xb5, 0xa7, 0x6b, 0x98, 0xc1, 0x87, 0x0e, 0x3c,
+    0x2c, 0xd3, 0x3c, 0x7d, 0x8f, 0x44, 0x11, 0x9a, 0xc8, 0xf5, 0xa6, 0x03, 0xc9, 0x71, 0xbd, 0xae, 0xe6, 0x7a, 0x87,
+    0xf6, 0x51, 0x57, 0x3f, 0xfd, 0x46, 0xd3, 0x4e, 0x26, 0x6c, 0x9a, 0x9e, 0xe2, 0x15, 0xed, 0x04, 0xcf, 0x08, 0xfa,
+    0xad, 0x69, 0xf6, 0x38, 0x4c, 0x2d, 0x57, 0x5b, 0xf3, 0x47, 0x4d, 0x9b, 0x06, 0x61, 0xd8, 0xd3, 0x1e, 0x4f, 0xbd,
+    0xe9, 0xe1, 0xf4, 0x45, 0x9f, 0x17, 0xe7, 0xdf, 0x94, 0xaa, 0x9b, 0xf4, 0xaf, 0xa7, 0x34, 0x4b, 0xb3, 0x24, 0xfe,
+    0xc4, 0xb8, 0xd9, 0x89, 0x26, 0x2f, 0x8f, 0xd5, 0xa6, 0x5e, 0xfd, 0x4b, 0x6e, 0x77, 0x34, 0x9e, 0x7a, 0x45, 0x75,
+    0xec, 0xe3, 0x81, 0xec, 0xe4, 0xc9, 0x81, 0xe8, 0xfa, 0x89, 0x8a, 0x26, 0xd7, 0x6a, 0x42, 0x94, 0xab, 0xf3, 0x31,
+    0xce, 0xc4, 0xf8, 0x4e, 0x20, 0x0e, 0xa3, 0x74, 0xd7, 0x85, 0x1e, 0xe8, 0xda, 0x64, 0xa0, 0xff, 0xe8, 0x7a, 0x5d,
+    0xd3, 0x75, 0x8f, 0xec, 0xa3, 0xee, 0xd8, 0x31, 0x0f, 0xed, 0x43, 0xab, 0x6d, 0x1f, 0x99, 0x5d, 0xab, 0x6b, 0x76,
+    0xff, 0xd6, 0x1d, 0x5b, 0x87, 0xf6, 0xa1, 0xe9, 0x58, 0x5d, 0x28, 0xb4, 0xba, 0x56, 0xf7, 0xc6, 0x3a, 0xec, 0x8e,
+    0x1d, 0x2c, 0xf5, 0xec, 0x4e, 0xc7, 0x72, 0x1d, 0xbb, 0xd3, 0x31, 0x3b, 0xf6, 0xd1, 0x91, 0xe5, 0xb6, 0xed, 0xa3,
+    0xa3, 0xf3, 0x4e, 0xd7, 0x6e, 0xc3, 0xbb, 0x76, 0x7b, 0xdc, 0xb6, 0x5d, 0xd7, 0x82, 0xbf, 0xcc, 0xae, 0xed, 0xd1,
+    0x0f, 0xd7, 0xb5, 0xdb, 0xae, 0xe9, 0x84, 0x1d, 0xcf, 0x3e, 0x7a, 0x61, 0xe2, 0xdf, 0x58, 0xcd, 0xc4, 0xbf, 0x00,
+    0x8c, 0xf9, 0xc2, 0xf6, 0x8e, 0xe8, 0x17, 0x02, 0xbc, 0x39, 0xec, 0xfe, 0xaa, 0x1f, 0x6c, 0x1c, 0x83, 0x4b, 0x63,
+    0xe8, 0x76, 0xec, 0x76, 0xdb, 0x3c, 0x74, 0xed, 0x6e, 0x7b, 0x6e, 0x1d, 0x7a, 0xf6, 0xd1, 0xf1, 0xd8, 0x72, 0xed,
+    0xe3, 0x63, 0xd3, 0xb1, 0xda, 0xb6, 0x67, 0xba, 0xf6, 0x61, 0x1b, 0x7f, 0xb4, 0x6d, 0xef, 0xe6, 0xf8, 0x85, 0x7d,
+    0xd4, 0x99, 0x1f, 0xd9, 0x87, 0x1f, 0x0f, 0xbb, 0xb6, 0xd7, 0x9e, 0xb7, 0x8f, 0x6c, 0xef, 0xf8, 0xe6, 0xc8, 0x3e,
+    0x9c, 0x5b, 0xde, 0xd1, 0xd6, 0x96, 0xae, 0x67, 0x03, 0x8e, 0xf0, 0x35, 0xbc, 0x30, 0xf9, 0x0b, 0xf8, 0x33, 0xc7,
+    0xb6, 0xff, 0x45, 0x30, 0x69, 0xbd, 0xe9, 0x0b, 0xbb, 0x7b, 0x3c, 0xa6, 0xea, 0x50, 0x60, 0x89, 0x1a, 0xd0, 0xe4,
+    0xc6, 0xa2, 0xcf, 0x22, 0x38, 0x4b, 0x00, 0x12, 0x7f, 0xf8, 0xc7, 0x6e, 0x2c, 0xf8, 0x30, 0x7d, 0xf7, 0x7f, 0x0a,
+    0x47, 0x4e, 0x39, 0x64, 0xae, 0xfc, 0x86, 0xff, 0x43, 0x49, 0x5f, 0x86, 0xe6, 0xf9, 0x26, 0x45, 0xc5, 0xfb, 0xdd,
+    0x8a, 0x8a, 0x37, 0xab, 0x7d, 0x14, 0x15, 0xef, 0xbf, 0xba, 0xa2, 0xe2, 0xbc, 0x6a, 0x27, 0xff, 0xbe, 0x1a, 0x9b,
+    0xfe, 0xd7, 0x75, 0xf5, 0x1a, 0x12, 0xf8, 0xad, 0xcb, 0x8b, 0xd5, 0x15, 0x44, 0x57, 0x7a, 0x1f, 0x0f, 0xde, 0xac,
+    0x4a, 0x46, 0x60, 0x31, 0xd0, 0xd8, 0xf7, 0x31, 0xd1, 0xd8, 0xdf, 0x57, 0x03, 0xb0, 0x3c, 0xe1, 0x7c, 0x49, 0x30,
+    0xb1, 0xe6, 0x7e, 0x38, 0x95, 0x3c, 0x0d, 0x94, 0xf4, 0xb1, 0x18, 0xbc, 0x12, 0xe0, 0xb8, 0x06, 0x75, 0xd8, 0x6a,
+    0x11, 0xa5, 0xbd, 0x23, 0x07, 0x0e, 0x52, 0x6f, 0x9a, 0xe4, 0x95, 0xc6, 0xb6, 0x88, 0x47, 0x75, 0xcd, 0xbd, 0x26,
+    0x36, 0xbe, 0x47, 0xa3, 0xc0, 0x66, 0xe8, 0x6e, 0x1d, 0xae, 0x06, 0xd6, 0x36, 0xc2, 0x68, 0x12, 0xd8, 0xb9, 0xa6,
+    0xf7, 0x65, 0xd3, 0xbc, 0x8a, 0x31, 0xe6, 0xe6, 0x9e, 0x42, 0x4f, 0xaa, 0xed, 0xdd, 0xb2, 0x69, 0xdf, 0xae, 0x61,
+    0x36, 0x7c, 0xbe, 0xd4, 0x7c, 0x8b, 0x5d, 0xa1, 0x04, 0x5c, 0x45, 0x55, 0x25, 0xb3, 0x5a, 0x23, 0x42, 0x0a, 0xee,
+    0xbe, 0x30, 0x3e, 0x2c, 0x58, 0x4b, 0x47, 0x43, 0x7e, 0xc7, 0x51, 0xde, 0x95, 0x60, 0xaa, 0x06, 0x8b, 0xcf, 0xd6,
+    0xc8, 0x71, 0x07, 0xbf, 0x03, 0xeb, 0xc8, 0x39, 0x9e, 0x51, 0xac, 0xe2, 0x79, 0xad, 0xc0, 0xa5, 0xcb, 0x4c, 0x3e,
+    0x77, 0xd7, 0x75, 0xe6, 0x71, 0xa3, 0xa9, 0xb2, 0xcb, 0x16, 0x82, 0x0b, 0xc2, 0xcf, 0x93, 0x61, 0x70, 0x4e, 0xc6,
+    0xdb, 0x68, 0xfb, 0xbc, 0x0d, 0x98, 0xa8, 0xf7, 0x18, 0x16, 0xb1, 0xc9, 0x1f, 0xd4, 0xb8, 0x00, 0xeb, 0x29, 0x64,
+    0xc1, 0xee, 0x21, 0x9b, 0xa6, 0xf0, 0xa8, 0x1e, 0x5a, 0x31, 0xf7, 0xb7, 0x18, 0xd8, 0xa8, 0x80, 0x39, 0x10, 0xb4,
+    0x86, 0xde, 0x66, 0x93, 0x23, 0x9d, 0x47, 0xd6, 0x25, 0x15, 0xb5, 0xdb, 0x39, 0x36, 0xdd, 0x23, 0xd3, 0x3e, 0xee,
+    0x18, 0xb9, 0xd8, 0x70, 0x2a, 0xc8, 0x12, 0x42, 0xc0, 0x28, 0x5a, 0x76, 0x33, 0x88, 0x82, 0x2c, 0xf0, 0xc3, 0x1c,
+    0xf8, 0xe3, 0xf2, 0xad, 0xe2, 0x9f, 0xab, 0x34, 0x83, 0x31, 0x0a, 0xa6, 0x17, 0x0d, 0xc2, 0xad, 0x11, 0xcb, 0x6e,
+    0x19, 0x8b, 0x36, 0x28, 0xcb, 0xab, 0xf6, 0xe5, 0x7f, 0x9e, 0xb5, 0x6d, 0x4e, 0x96, 0x2c, 0xa3, 0x2c, 0xe2, 0xeb,
+    0x43, 0x18, 0x43, 0xe7, 0x43, 0xf3, 0xa7, 0x4d, 0x04, 0xf7, 0x9f, 0xbb, 0x09, 0x6e, 0xc6, 0xf6, 0x21, 0xb8, 0xff,
+    0xfc, 0xea, 0x04, 0xf7, 0x27, 0x95, 0xe0, 0x96, 0x7c, 0x81, 0x0a, 0xa9, 0xf3, 0x07, 0x7c, 0x6e, 0x41, 0x50, 0xe7,
+    0xe7, 0xfa, 0x01, 0x31, 0xf0, 0xba, 0x92, 0x6c, 0xf7, 0x63, 0x29, 0x7b, 0x10, 0x0a, 0x45, 0x30, 0x08, 0x2d, 0x65,
+    0x2a, 0x81, 0x44, 0xb4, 0x32, 0xa5, 0x3a, 0xc0, 0x7c, 0x1b, 0x65, 0xa1, 0xfd, 0x9e, 0x5f, 0xfc, 0x40, 0xc9, 0xf3,
+    0x26, 0x4e, 0x16, 0x3e, 0x06, 0xe0, 0xd3, 0x31, 0xeb, 0x20, 0x3c, 0x38, 0xe0, 0x7f, 0x36, 0x8e, 0xa3, 0x89, 0xd4,
+    0x54, 0xb0, 0xc1, 0x25, 0x71, 0xdc, 0xfa, 0x3d, 0xf3, 0x13, 0xdd, 0xa4, 0xd7, 0x30, 0xb9, 0xcf, 0xda, 0xce, 0x33,
+    0xef, 0xf0, 0xd9, 0x91, 0x03, 0xff, 0xbb, 0xac, 0x9d, 0x9b, 0xbc, 0xe2, 0x22, 0x8e, 0x20, 0xf1, 0x89, 0xa8, 0xb9,
+    0xa9, 0xda, 0x2d, 0x63, 0x9f, 0x8a, 0x5a, 0xc7, 0xcd, 0x95, 0x26, 0xfe, 0x7d, 0x51, 0xa7, 0xb1, 0xc6, 0x3c, 0x5e,
+    0x29, 0xdd, 0x6a, 0xe8, 0x4d, 0x10, 0xad, 0x40, 0xf6, 0xa6, 0xd4, 0x50, 0x5f, 0xf3, 0xe1, 0x16, 0xe3, 0x62, 0xed,
+    0xfc, 0xaa, 0xc8, 0xae, 0x24, 0xb2, 0xbc, 0xec, 0xc4, 0x20, 0x57, 0x5b, 0x38, 0x18, 0x9b, 0x1d, 0xf3, 0x0b, 0x69,
+    0x90, 0xdb, 0x50, 0x4c, 0x90, 0x4f, 0x13, 0x94, 0x25, 0xab, 0x68, 0xdc, 0xc2, 0x9f, 0xfe, 0x28, 0x6d, 0x05, 0x07,
+    0x10, 0x9d, 0x15, 0x3f, 0x6c, 0xe0, 0xac, 0xf9, 0xa7, 0x4e, 0x91, 0x8a, 0x22, 0x15, 0xb3, 0xe2, 0x3f, 0xcb, 0xcc,
+    0x84, 0x12, 0xd8, 0xe2, 0xd4, 0x5a, 0x03, 0xff, 0x99, 0x6c, 0xf8, 0x2c, 0x33, 0x21, 0x89, 0x2c, 0x4c, 0xf7, 0xd3,
+    0xa7, 0x54, 0x0b, 0xd2, 0x3a, 0xd2, 0xb0, 0xce, 0xc6, 0x45, 0x78, 0x37, 0xcd, 0x9f, 0xc5, 0x14, 0xe1, 0xad, 0x37,
+    0x36, 0xe3, 0xe7, 0xcf, 0x4f, 0x07, 0xae, 0xc1, 0x93, 0x92, 0x96, 0x32, 0x68, 0x9d, 0xef, 0x67, 0x7c, 0x60, 0x34,
+    0xba, 0xc5, 0x2d, 0xe1, 0xce, 0xe4, 0x08, 0x13, 0x65, 0x4e, 0xbd, 0x20, 0xa3, 0x05, 0x29, 0x19, 0x7d, 0x61, 0x04,
+    0x20, 0xea, 0xc8, 0x5b, 0x57, 0xdb, 0x76, 0x6c, 0x47, 0x97, 0x0d, 0xa7, 0xc1, 0x6c, 0xb0, 0x8e, 0x33, 0x1f, 0x72,
+    0x03, 0x85, 0xf1, 0x0c, 0x7c, 0x6b, 0xb2, 0x20, 0x0b, 0x21, 0xd1, 0x0c, 0x38, 0xd9, 0x2c, 0xe8, 0x5e, 0x9e, 0x73,
+    0x8b, 0x67, 0x3f, 0xf9, 0x84, 0xc9, 0x06, 0x85, 0x5b, 0x1d, 0x46, 0x1c, 0xfa, 0x11, 0x0e, 0xc3, 0x96, 0xde, 0x82,
+    0x54, 0x97, 0x2c, 0x49, 0x2d, 0xd5, 0x83, 0xa0, 0xa7, 0x41, 0x1b, 0x48, 0x43, 0x8f, 0x00, 0xa6, 0x89, 0xbf, 0x80,
+    0x98, 0xec, 0xeb, 0xdc, 0xe4, 0x94, 0x56, 0xe7, 0xa4, 0x56, 0x73, 0x5f, 0x1c, 0x99, 0x9a, 0xe7, 0x9a, 0x9a, 0x03,
+    0xe4, 0x56, 0xcf, 0xcd, 0x75, 0x7e, 0xd5, 0xdf, 0xa5, 0x04, 0x25, 0xfa, 0xf2, 0x98, 0xc6, 0x41, 0xea, 0x4f, 0x2e,
+    0x5e, 0xce, 0x28, 0x80, 0x64, 0x4b, 0x89, 0x96, 0x1e, 0x90, 0x22, 0xe4, 0x82, 0xdd, 0x65, 0x06, 0x26, 0x62, 0xe1,
+    0x55, 0x02, 0x63, 0x8d, 0xce, 0x7f, 0x41, 0xa4, 0x05, 0x9f, 0x3f, 0xb7, 0x02, 0x70, 0x70, 0x18, 0x28, 0xf8, 0x81,
+    0x67, 0xa3, 0x84, 0xb0, 0xa0, 0x50, 0xdd, 0x21, 0xb2, 0xc0, 0xfb, 0x08, 0xfe, 0x2d, 0x8a, 0xc5, 0x0f, 0xae, 0x3a,
+    0xb5, 0x43, 0x3f, 0x9a, 0x01, 0x49, 0xf3, 0xa3, 0x59, 0xcd, 0x44, 0x83, 0xfc, 0x17, 0x2b, 0xa5, 0x05, 0xa8, 0xc2,
+    0x7c, 0x22, 0xfd, 0xfe, 0xfe, 0x82, 0x12, 0x4d, 0x41, 0x52, 0x73, 0x7f, 0x82, 0xce, 0x76, 0x85, 0x76, 0xe7, 0xf9,
+    0xe0, 0xdb, 0x93, 0x05, 0xcb, 0x7c, 0x12, 0x0d, 0xc3, 0xe5, 0x17, 0xd8, 0x01, 0x6d, 0x2c, 0x92, 0xc4, 0x52, 0x32,
+    0xf9, 0x09, 0xbb, 0x09, 0xc6, 0xfc, 0x5e, 0x6a, 0x6a, 0xfc, 0x9c, 0xb2, 0xd0, 0x0a, 0x6c, 0xe0, 0x9a, 0x64, 0x84,
+    0x3c, 0xf6, 0x31, 0xcc, 0xe4, 0x20, 0x8a, 0xf5, 0xd3, 0x6f, 0xa5, 0xbf, 0xd6, 0xa6, 0x49, 0x80, 0x6c, 0x8f, 0x97,
+    0x09, 0x0b, 0xff, 0x35, 0xf8, 0x16, 0x0e, 0xee, 0x6f, 0xaf, 0x74, 0xa3, 0x9f, 0xd9, 0xf3, 0x84, 0x4d, 0x07, 0xdf,
+    0x36, 0x64, 0x3d, 0xc4, 0xeb, 0x3d, 0xf5, 0x45, 0x6f, 0x7b, 0x45, 0x70, 0xa0, 0xf6, 0x5e, 0x97, 0xfa, 0x53, 0x7e,
+    0x5b, 0x87, 0x1b, 0xe0, 0xba, 0x74, 0xc7, 0x76, 0xfb, 0x78, 0x7f, 0x1e, 0x85, 0xfe, 0xf8, 0x53, 0x9f, 0xde, 0x94,
+    0x1e, 0x2c, 0x38, 0xad, 0xc7, 0xfe, 0xb2, 0x87, 0xc7, 0xab, 0x5a, 0x08, 0xee, 0x9a, 0x54, 0x2a, 0x39, 0xbb, 0xc6,
+    0xb5, 0x8c, 0x4b, 0x79, 0x8d, 0x5f, 0xc6, 0x4f, 0xdd, 0xce, 0x83, 0x8c, 0x89, 0x4f, 0xe1, 0x43, 0x9e, 0x8b, 0x8b,
+    0x3a, 0x5d, 0x51, 0xf1, 0x62, 0x6d, 0xb7, 0x35, 0xb7, 0xfb, 0xb7, 0xce, 0x8d, 0xeb, 0xcc, 0x3d, 0xd7, 0xee, 0x7e,
+    0x74, 0xbb, 0xf3, 0xb6, 0x7d, 0x1c, 0x5a, 0x6d, 0xfb, 0x18, 0xfe, 0x7c, 0x3c, 0xb6, 0xbb, 0x73, 0xcb, 0xb3, 0x0f,
+    0x3f, 0xba, 0x5e, 0x68, 0x75, 0xed, 0x63, 0xf8, 0x73, 0x4e, 0xad, 0xe0, 0x02, 0x44, 0xf7, 0x9d, 0x6f, 0x4b, 0x54,
+    0x40, 0xf9, 0x2d, 0xf5, 0x34, 0x66, 0xe9, 0x78, 0x6b, 0xd0, 0xf5, 0x00, 0xc9, 0xd0, 0x4d, 0x11, 0x04, 0x32, 0xea,
+    0xb7, 0x20, 0x0d, 0x3b, 0x26, 0x10, 0x10, 0x26, 0x2f, 0xc2, 0x2f, 0x55, 0x84, 0xd2, 0x6f, 0xdc, 0x46, 0xbc, 0x4d,
+    0x73, 0xc0, 0x75, 0x91, 0x99, 0x8a, 0x94, 0x43, 0xbf, 0x2c, 0x31, 0x88, 0x91, 0x08, 0x11, 0xaf, 0x50, 0xa5, 0x22,
+    0x3b, 0x62, 0xbe, 0xbb, 0xe3, 0xe8, 0x99, 0xcb, 0x64, 0x76, 0x9e, 0xaf, 0x0a, 0x9b, 0x2b, 0x8c, 0x24, 0xf4, 0x3f,
+    0x0a, 0x07, 0x93, 0xd2, 0x12, 0x1c, 0x11, 0xcd, 0x75, 0x12, 0x24, 0xb2, 0x7b, 0x0a, 0x89, 0x76, 0x9b, 0x23, 0xd5,
+    0x1b, 0x90, 0xc6, 0xe4, 0x2d, 0x70, 0xc9, 0x37, 0x7e, 0xa8, 0x18, 0xb7, 0x28, 0x2d, 0x1f, 0x49, 0xca, 0xff, 0xf4,
+    0x69, 0xd1, 0x39, 0xab, 0xd2, 0xef, 0x13, 0xb7, 0x03, 0xc7, 0x6e, 0x87, 0xb5, 0xb7, 0xda, 0x59, 0xed, 0x0e, 0x07,
+    0x5c, 0x84, 0x0b, 0x15, 0xb6, 0x14, 0x42, 0x8b, 0xbb, 0xd1, 0xd8, 0xab, 0xa6, 0xc3, 0x85, 0x40, 0xca, 0x95, 0xab,
+    0x8e, 0x6e, 0xf4, 0x23, 0xa1, 0x92, 0x8c, 0xb6, 0x84, 0x40, 0xe6, 0x77, 0x31, 0x1d, 0x50, 0xb3, 0x65, 0x1c, 0x3b,
+    0x9c, 0x46, 0xff, 0xd7, 0x83, 0x40, 0x07, 0x2e, 0xd0, 0xa1, 0x56, 0x76, 0x6b, 0xc9, 0xa1, 0x47, 0x9e, 0xab, 0x74,
+    0xa0, 0xb2, 0xf4, 0x4c, 0x87, 0x22, 0xc8, 0x6f, 0x85, 0x29, 0xed, 0xa4, 0x01, 0x99, 0x3c, 0x2d, 0x8a, 0x02, 0x33,
+    0x80, 0x18, 0xe0, 0x2d, 0xe1, 0x4c, 0x66, 0x3c, 0x7d, 0xba, 0xf1, 0x10, 0x22, 0x85, 0xbd, 0x9a, 0xd9, 0x53, 0x57,
+    0xe9, 0x9b, 0xae, 0x92, 0x18, 0x09, 0x17, 0xa9, 0x86, 0xb0, 0x7b, 0xa3, 0xb5, 0x87, 0x3f, 0x47, 0xcc, 0xcf, 0x6c,
+    0xae, 0x69, 0x6a, 0x29, 0x87, 0xbb, 0xe9, 0xb2, 0x36, 0x58, 0xbc, 0xf1, 0x58, 0x67, 0x3c, 0x96, 0xe0, 0x93, 0xf5,
+    0xc7, 0x15, 0xf7, 0xf4, 0x06, 0x18, 0x9f, 0x9d, 0x22, 0x3c, 0xcd, 0xbb, 0xcc, 0xa7, 0x18, 0x26, 0xea, 0x91, 0x1b,
+    0x67, 0xbe, 0xc8, 0x23, 0x03, 0x7c, 0x79, 0xbf, 0x51, 0x25, 0xab, 0x78, 0x83, 0x9f, 0xbe, 0xbb, 0xf8, 0x4e, 0xe3,
+    0xeb, 0x9f, 0x34, 0x88, 0x78, 0x91, 0xa1, 0xac, 0x07, 0x03, 0xca, 0x7a, 0xa0, 0xf1, 0x34, 0x22, 0x90, 0x3b, 0x20,
+    0x3f, 0x20, 0x0c, 0xa2, 0x00, 0x9a, 0xf4, 0xaa, 0x8b, 0x55, 0x98, 0x05, 0x4b, 0x3f, 0xc9, 0x0e, 0xa0, 0xa9, 0x05,
+    0x44, 0x4e, 0xdf, 0xe4, 0x23, 0x4e, 0xaa, 0x59, 0x11, 0x62, 0x2f, 0x8b, 0x84, 0x6e, 0x76, 0x1a, 0x84, 0x52, 0x35,
+    0x2b, 0x3e, 0xe0, 0x8f, 0xc7, 0x6c, 0x99, 0x0d, 0x74, 0x7f, 0x09, 0xd9, 0x2f, 0x30, 0x9e, 0xf5, 0x41, 0x3c, 0xce,
+    0x58, 0x66, 0xa5, 0x59, 0xc2, 0xfc, 0x85, 0x2e, 0x43, 0xb9, 0xd6, 0xe1, 0xa5, 0xab, 0xd1, 0x22, 0xc8, 0x64, 0x2c,
+    0x44, 0x1a, 0x20, 0x28, 0x49, 0xa1, 0x8b, 0xa7, 0xc3, 0x9c, 0xa3, 0xf0, 0x3c, 0x9e, 0x55, 0x56, 0x54, 0xc1, 0xb9,
+    0x9c, 0x61, 0xa4, 0x5d, 0x9e, 0xf1, 0x60, 0x82, 0x3e, 0x4f, 0xd7, 0xdc, 0xaf, 0x5d, 0x86, 0x6c, 0xd4, 0x4f, 0x4f,
+    0xf8, 0xf5, 0x56, 0xc3, 0x50, 0x0c, 0x7a, 0xc7, 0x81, 0x58, 0xc2, 0x9b, 0x3c, 0xde, 0x0f, 0x78, 0x65, 0x38, 0x9a,
+    0x08, 0x32, 0xc6, 0x79, 0xa7, 0xbe, 0x5c, 0x00, 0x23, 0x54, 0x52, 0xa2, 0xcf, 0xdd, 0x53, 0xe9, 0x62, 0x85, 0xbd,
+    0x42, 0x5e, 0xe9, 0xf3, 0xe7, 0x97, 0xc3, 0xff, 0xfc, 0x1b, 0x82, 0xd1, 0xcf, 0x5d, 0xe1, 0x67, 0x7e, 0xa9, 0xd6,
+    0xe2, 0xdc, 0xa7, 0x39, 0x44, 0x03, 0x0a, 0x36, 0x11, 0x81, 0x57, 0xc4, 0xd2, 0xca, 0x87, 0x57, 0x22, 0x98, 0x16,
+    0x24, 0x9c, 0x30, 0x84, 0x37, 0xfc, 0x10, 0xa6, 0x77, 0x28, 0x82, 0x30, 0x68, 0xbf, 0xdd, 0x7d, 0x7f, 0x0c, 0xc1,
+    0x96, 0x6b, 0x79, 0x20, 0x94, 0x0e, 0xe2, 0x1a, 0x3a, 0x3d, 0xf1, 0x35, 0x64, 0x5a, 0x90, 0xfd, 0x48, 0x7b, 0x07,
+    0x30, 0xcc, 0x79, 0xbc, 0x60, 0x76, 0x10, 0x1f, 0xdc, 0xb2, 0x91, 0xe5, 0x2f, 0x03, 0xd2, 0xd5, 0xa3, 0xdc, 0x4d,
+    0x23, 0xce, 0x4f, 0xaa, 0xc0, 0x89, 0xbf, 0xce, 0x0b, 0x54, 0xc6, 0xe5, 0xe8, 0x69, 0x1d, 0xaf, 0x50, 0xdc, 0x81,
+    0x4f, 0xb3, 0x82, 0xc7, 0xf8, 0xf4, 0xe4, 0xc0, 0x3f, 0x2d, 0x87, 0x6f, 0xb4, 0x45, 0x02, 0x81, 0xf2, 0x21, 0x70,
+    0x46, 0x51, 0x18, 0x45, 0xc0, 0xc5, 0xe2, 0xc1, 0x8a, 0xa7, 0x53, 0x35, 0xe4, 0xa2, 0x5d, 0xee, 0x9e, 0x44, 0x5a,
+    0xb1, 0xa4, 0xe3, 0x25, 0x7d, 0xa9, 0xfe, 0x09, 0xf9, 0x13, 0x92, 0x27, 0xf3, 0xe8, 0x9c, 0xb0, 0xdd, 0x6b, 0xa1,
+    0x1b, 0x25, 0xc6, 0x1e, 0x53, 0x25, 0x4e, 0x47, 0xaa, 0x81, 0xc2, 0x37, 0x70, 0x2e, 0x8f, 0x06, 0x03, 0x22, 0x73,
+    0x55, 0x6a, 0x07, 0x48, 0x6c, 0x48, 0xa6, 0x00, 0x83, 0xcd, 0xa0, 0xa1, 0x45, 0x2e, 0x74, 0xd8, 0xa8, 0x3a, 0x9c,
+    0x7a, 0x1f, 0x0f, 0x7c, 0xb1, 0xfc, 0x4a, 0x0b, 0x14, 0x16, 0x1e, 0x9f, 0x77, 0xa0, 0xef, 0x02, 0x4e, 0x85, 0xcc,
+    0x6b, 0x7f, 0x25, 0x8a, 0x6e, 0x85, 0xfe, 0x7d, 0xac, 0x98, 0x36, 0xf0, 0x28, 0x07, 0xe7, 0x58, 0x7a, 0x21, 0xbc,
+    0x0b, 0x6b, 0x1b, 0x4d, 0x06, 0xa4, 0xaf, 0x6f, 0x36, 0x35, 0x82, 0xfc, 0xae, 0xbd, 0xa6, 0xd6, 0x2d, 0x0f, 0x06,
+    0x89, 0x67, 0x5e, 0xec, 0xc3, 0xd2, 0x4b, 0x24, 0x0b, 0xf9, 0xc9, 0x01, 0x8c, 0x0f, 0x22, 0x33, 0x94, 0x18, 0xa7,
+    0xc0, 0x80, 0xf0, 0x0f, 0x7e, 0x4a, 0xe6, 0x19, 0x6f, 0x27, 0x82, 0xe7, 0xc3, 0x8b, 0xa5, 0x8c, 0x0d, 0x5b, 0xaa,
+    0x52, 0xe7, 0x65, 0x9c, 0x66, 0x26, 0x70, 0x77, 0x02, 0x87, 0xdf, 0x57, 0x98, 0xbd, 0x21, 0xef, 0x67, 0x4c, 0x38,
+    0x3e, 0x9f, 0x67, 0x1b, 0x7c, 0xa3, 0x37, 0x55, 0x21, 0x7e, 0x76, 0x4b, 0x85, 0x62, 0x1d, 0x6f, 0xab, 0x55, 0x70,
+    0x4e, 0xb2, 0xda, 0xd2, 0x6f, 0xe9, 0x8f, 0x71, 0xc5, 0xd7, 0x6a, 0x63, 0x29, 0xd4, 0x3b, 0xcf, 0x06, 0x50, 0x55,
+    0xc8, 0xe2, 0xfd, 0xe5, 0x92, 0x2a, 0x1b, 0xfd, 0x93, 0x03, 0xba, 0x96, 0x9e, 0xd2, 0x0a, 0x3b, 0x3d, 0x01, 0xf3,
+    0x4e, 0x9a, 0x74, 0x7f, 0xb9, 0xe4, 0x53, 0x4a, 0xbf, 0xe8, 0xcd, 0xc1, 0x3c, 0x5b, 0x84, 0xa7, 0xff, 0x07, 0xc0,
+    0xb1, 0x34, 0x8b, 0x20, 0x5c, 0x03, 0x00};
 
 }  // namespace web_server
 }  // namespace esphome
diff --git a/esphome/components/wifi/__init__.py b/esphome/components/wifi/__init__.py
index 3b9e00956f..624bcdabdc 100644
--- a/esphome/components/wifi/__init__.py
+++ b/esphome/components/wifi/__init__.py
@@ -114,7 +114,7 @@ EAP_AUTH_SCHEMA = cv.All(
             cv.Optional(CONF_USERNAME): cv.string_strict,
             cv.Optional(CONF_PASSWORD): cv.string_strict,
             cv.Optional(CONF_CERTIFICATE_AUTHORITY): wpa2_eap.validate_certificate,
-            cv.Optional(CONF_TTLS_PHASE_2): cv.All(
+            cv.SplitDefault(CONF_TTLS_PHASE_2, esp32_idf="mschapv2"): cv.All(
                 cv.enum(TTLS_PHASE_2), cv.only_with_esp_idf
             ),
             cv.Inclusive(
@@ -350,7 +350,7 @@ def eap_auth(config):
         ("ca_cert", ca_cert),
         ("client_cert", client_cert),
         ("client_key", key),
-        ("ttls_phase_2", config.get(CONF_TTLS_PHASE_2, TTLS_PHASE_2["mschapv2"])),
+        ("ttls_phase_2", config.get(CONF_TTLS_PHASE_2)),
     )
 
 
diff --git a/esphome/components/wifi/wifi_component.h b/esphome/components/wifi/wifi_component.h
index 0b077819ae..d79cde0b18 100644
--- a/esphome/components/wifi/wifi_component.h
+++ b/esphome/components/wifi/wifi_component.h
@@ -20,8 +20,12 @@
 #endif
 
 #if defined(USE_ESP_IDF) && defined(USE_WIFI_WPA2_EAP)
+#if (ESP_IDF_VERSION_MAJOR >= 5) && (ESP_IDF_VERSION_MINOR >= 1)
+#include <esp_eap_client.h>
+#else
 #include <esp_wpa2.h>
 #endif
+#endif
 
 #ifdef USE_ESP8266
 #include <ESP8266WiFi.h>
diff --git a/esphome/components/wifi/wifi_component_esp32_arduino.cpp b/esphome/components/wifi/wifi_component_esp32_arduino.cpp
index ef7a624cd5..fc954a2333 100644
--- a/esphome/components/wifi/wifi_component_esp32_arduino.cpp
+++ b/esphome/components/wifi/wifi_component_esp32_arduino.cpp
@@ -694,15 +694,15 @@ bool WiFiComponent::wifi_ap_ip_config_(optional<ManualIP> manual_ip) {
     info.netmask = network::IPAddress(255, 255, 255, 0);
   }
 
-  err = esp_netif_dhcpc_stop(s_ap_netif);
+  err = esp_netif_dhcps_stop(s_ap_netif);
   if (err != ESP_OK && err != ESP_ERR_ESP_NETIF_DHCP_ALREADY_STOPPED) {
-    ESP_LOGV(TAG, "esp_netif_dhcpc_stop failed: %s", esp_err_to_name(err));
+    ESP_LOGE(TAG, "esp_netif_dhcps_stop failed: %s", esp_err_to_name(err));
     return false;
   }
 
   err = esp_netif_set_ip_info(s_ap_netif, &info);
   if (err != ESP_OK) {
-    ESP_LOGV(TAG, "esp_netif_set_ip_info failed! %d", err);
+    ESP_LOGE(TAG, "esp_netif_set_ip_info failed! %d", err);
     return false;
   }
 
@@ -712,20 +712,20 @@ bool WiFiComponent::wifi_ap_ip_config_(optional<ManualIP> manual_ip) {
   start_address += 99;
   lease.start_ip = start_address;
   ESP_LOGV(TAG, "DHCP server IP lease start: %s", start_address.str().c_str());
-  start_address += 100;
+  start_address += 10;
   lease.end_ip = start_address;
   ESP_LOGV(TAG, "DHCP server IP lease end: %s", start_address.str().c_str());
   err = esp_netif_dhcps_option(s_ap_netif, ESP_NETIF_OP_SET, ESP_NETIF_REQUESTED_IP_ADDRESS, &lease, sizeof(lease));
 
   if (err != ESP_OK) {
-    ESP_LOGV(TAG, "esp_netif_dhcps_option failed! %d", err);
+    ESP_LOGE(TAG, "esp_netif_dhcps_option failed! %d", err);
     return false;
   }
 
   err = esp_netif_dhcps_start(s_ap_netif);
 
   if (err != ESP_OK) {
-    ESP_LOGV(TAG, "esp_netif_dhcps_start failed! %d", err);
+    ESP_LOGE(TAG, "esp_netif_dhcps_start failed! %d", err);
     return false;
   }
 
diff --git a/esphome/components/wifi/wifi_component_esp8266.cpp b/esphome/components/wifi/wifi_component_esp8266.cpp
index 838250972b..997457e2d2 100644
--- a/esphome/components/wifi/wifi_component_esp8266.cpp
+++ b/esphome/components/wifi/wifi_component_esp8266.cpp
@@ -716,12 +716,12 @@ bool WiFiComponent::wifi_ap_ip_config_(optional<ManualIP> manual_ip) {
 
   if (wifi_softap_dhcps_status() == DHCP_STARTED) {
     if (!wifi_softap_dhcps_stop()) {
-      ESP_LOGV(TAG, "Stopping DHCP server failed!");
+      ESP_LOGW(TAG, "Stopping DHCP server failed!");
     }
   }
 
   if (!wifi_set_ip_info(SOFTAP_IF, &info)) {
-    ESP_LOGV(TAG, "Setting SoftAP info failed!");
+    ESP_LOGE(TAG, "Setting SoftAP info failed!");
     return false;
   }
 
@@ -735,17 +735,17 @@ bool WiFiComponent::wifi_ap_ip_config_(optional<ManualIP> manual_ip) {
   start_address += 99;
   lease.start_ip = start_address;
   ESP_LOGV(TAG, "DHCP server IP lease start: %s", start_address.str().c_str());
-  start_address += 100;
+  start_address += 10;
   lease.end_ip = start_address;
   ESP_LOGV(TAG, "DHCP server IP lease end: %s", start_address.str().c_str());
   if (!wifi_softap_set_dhcps_lease(&lease)) {
-    ESP_LOGV(TAG, "Setting SoftAP DHCP lease failed!");
+    ESP_LOGE(TAG, "Setting SoftAP DHCP lease failed!");
     return false;
   }
 
   // lease time 1440 minutes (=24 hours)
   if (!wifi_softap_set_dhcps_lease_time(1440)) {
-    ESP_LOGV(TAG, "Setting SoftAP DHCP lease time failed!");
+    ESP_LOGE(TAG, "Setting SoftAP DHCP lease time failed!");
     return false;
   }
 
@@ -755,13 +755,13 @@ bool WiFiComponent::wifi_ap_ip_config_(optional<ManualIP> manual_ip) {
   uint8_t mode = 1;
   // bit0, 1 enables router information from ESP8266 SoftAP DHCP server.
   if (!wifi_softap_set_dhcps_offer_option(OFFER_ROUTER, &mode)) {
-    ESP_LOGV(TAG, "wifi_softap_set_dhcps_offer_option failed!");
+    ESP_LOGE(TAG, "wifi_softap_set_dhcps_offer_option failed!");
     return false;
   }
 #endif
 
   if (!wifi_softap_dhcps_start()) {
-    ESP_LOGV(TAG, "Starting SoftAP DHCPS failed!");
+    ESP_LOGE(TAG, "Starting SoftAP DHCPS failed!");
     return false;
   }
 
diff --git a/esphome/components/wifi/wifi_component_esp_idf.cpp b/esphome/components/wifi/wifi_component_esp_idf.cpp
index bc575e6a2d..a8d67ed44d 100644
--- a/esphome/components/wifi/wifi_component_esp_idf.cpp
+++ b/esphome/components/wifi/wifi_component_esp_idf.cpp
@@ -15,8 +15,12 @@
 #include <cinttypes>
 #include <utility>
 #ifdef USE_WIFI_WPA2_EAP
+#if (ESP_IDF_VERSION_MAJOR >= 5) && (ESP_IDF_VERSION_MINOR >= 1)
+#include <esp_eap_client.h>
+#else
 #include <esp_wpa2.h>
 #endif
+#endif
 
 #ifdef USE_WIFI_AP
 #include "dhcpserver/dhcpserver.h"
@@ -364,48 +368,78 @@ bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) {
   if (ap.get_eap().has_value()) {
     // note: all certificates and keys have to be null terminated. Lengths are appended by +1 to include \0.
     EAPAuth eap = ap.get_eap().value();
+#if (ESP_IDF_VERSION_MAJOR >= 5) && (ESP_IDF_VERSION_MINOR >= 1)
+    err = esp_eap_client_set_identity((uint8_t *) eap.identity.c_str(), eap.identity.length());
+#else
     err = esp_wifi_sta_wpa2_ent_set_identity((uint8_t *) eap.identity.c_str(), eap.identity.length());
+#endif
     if (err != ESP_OK) {
-      ESP_LOGV(TAG, "esp_wifi_sta_wpa2_ent_set_identity failed! %d", err);
+      ESP_LOGV(TAG, "set_identity failed %d", err);
     }
     int ca_cert_len = strlen(eap.ca_cert);
     int client_cert_len = strlen(eap.client_cert);
     int client_key_len = strlen(eap.client_key);
     if (ca_cert_len) {
+#if (ESP_IDF_VERSION_MAJOR >= 5) && (ESP_IDF_VERSION_MINOR >= 1)
+      err = esp_eap_client_set_ca_cert((uint8_t *) eap.ca_cert, ca_cert_len + 1);
+#else
       err = esp_wifi_sta_wpa2_ent_set_ca_cert((uint8_t *) eap.ca_cert, ca_cert_len + 1);
+#endif
       if (err != ESP_OK) {
-        ESP_LOGV(TAG, "esp_wifi_sta_wpa2_ent_set_ca_cert failed! %d", err);
+        ESP_LOGV(TAG, "set_ca_cert failed %d", err);
       }
     }
     // workout what type of EAP this is
     // validation is not required as the config tool has already validated it
     if (client_cert_len && client_key_len) {
       // if we have certs, this must be EAP-TLS
+#if (ESP_IDF_VERSION_MAJOR >= 5) && (ESP_IDF_VERSION_MINOR >= 1)
+      err = esp_eap_client_set_certificate_and_key((uint8_t *) eap.client_cert, client_cert_len + 1,
+                                                   (uint8_t *) eap.client_key, client_key_len + 1,
+                                                   (uint8_t *) eap.password.c_str(), strlen(eap.password.c_str()));
+#else
       err = esp_wifi_sta_wpa2_ent_set_cert_key((uint8_t *) eap.client_cert, client_cert_len + 1,
                                                (uint8_t *) eap.client_key, client_key_len + 1,
                                                (uint8_t *) eap.password.c_str(), strlen(eap.password.c_str()));
+#endif
       if (err != ESP_OK) {
-        ESP_LOGV(TAG, "esp_wifi_sta_wpa2_ent_set_cert_key failed! %d", err);
+        ESP_LOGV(TAG, "set_cert_key failed %d", err);
       }
     } else {
       // in the absence of certs, assume this is username/password based
+#if (ESP_IDF_VERSION_MAJOR >= 5) && (ESP_IDF_VERSION_MINOR >= 1)
+      err = esp_eap_client_set_username((uint8_t *) eap.username.c_str(), eap.username.length());
+#else
       err = esp_wifi_sta_wpa2_ent_set_username((uint8_t *) eap.username.c_str(), eap.username.length());
+#endif
       if (err != ESP_OK) {
-        ESP_LOGV(TAG, "esp_wifi_sta_wpa2_ent_set_username failed! %d", err);
+        ESP_LOGV(TAG, "set_username failed %d", err);
       }
+#if (ESP_IDF_VERSION_MAJOR >= 5) && (ESP_IDF_VERSION_MINOR >= 1)
+      err = esp_eap_client_set_password((uint8_t *) eap.password.c_str(), eap.password.length());
+#else
       err = esp_wifi_sta_wpa2_ent_set_password((uint8_t *) eap.password.c_str(), eap.password.length());
+#endif
       if (err != ESP_OK) {
-        ESP_LOGV(TAG, "esp_wifi_sta_wpa2_ent_set_password failed! %d", err);
+        ESP_LOGV(TAG, "set_password failed %d", err);
       }
       // set TTLS Phase 2, defaults to MSCHAPV2
+#if (ESP_IDF_VERSION_MAJOR >= 5) && (ESP_IDF_VERSION_MINOR >= 1)
+      err = esp_eap_client_set_ttls_phase2_method(eap.ttls_phase_2);
+#else
       err = esp_wifi_sta_wpa2_ent_set_ttls_phase2_method(eap.ttls_phase_2);
+#endif
       if (err != ESP_OK) {
-        ESP_LOGV(TAG, "esp_wifi_sta_wpa2_ent_set_ttls_phase2_method failed! %d", err);
+        ESP_LOGV(TAG, "set_ttls_phase2_method failed %d", err);
       }
     }
+#if (ESP_IDF_VERSION_MAJOR >= 5) && (ESP_IDF_VERSION_MINOR >= 1)
+    err = esp_wifi_sta_enterprise_enable();
+#else
     err = esp_wifi_sta_wpa2_ent_enable();
+#endif
     if (err != ESP_OK) {
-      ESP_LOGV(TAG, "esp_wifi_sta_wpa2_ent_enable failed! %d", err);
+      ESP_LOGV(TAG, "enterprise_enable failed %d", err);
     }
   }
 #endif  // USE_WIFI_WPA2_EAP
@@ -757,7 +791,7 @@ void WiFiComponent::wifi_process_event_(IDFWiFiEvent *data) {
 
 WiFiSTAConnectStatus WiFiComponent::wifi_sta_connect_status_() {
   if (s_sta_connected && this->got_ipv4_address_) {
-#if USE_NETWORK_IPV6
+#if USE_NETWORK_IPV6 && (USE_NETWORK_MIN_IPV6_ADDR_COUNT > 0)
     if (this->num_ipv6_addresses_ >= USE_NETWORK_MIN_IPV6_ADDR_COUNT) {
       return WiFiSTAConnectStatus::CONNECTED;
     }
@@ -823,15 +857,15 @@ bool WiFiComponent::wifi_ap_ip_config_(optional<ManualIP> manual_ip) {
     info.netmask = network::IPAddress(255, 255, 255, 0);
   }
 
-  err = esp_netif_dhcpc_stop(s_ap_netif);
+  err = esp_netif_dhcps_stop(s_ap_netif);
   if (err != ESP_OK && err != ESP_ERR_ESP_NETIF_DHCP_ALREADY_STOPPED) {
-    ESP_LOGV(TAG, "esp_netif_dhcpc_stop failed: %s", esp_err_to_name(err));
+    ESP_LOGE(TAG, "esp_netif_dhcps_stop failed: %s", esp_err_to_name(err));
     return false;
   }
 
   err = esp_netif_set_ip_info(s_ap_netif, &info);
   if (err != ESP_OK) {
-    ESP_LOGV(TAG, "esp_netif_set_ip_info failed! %d", err);
+    ESP_LOGE(TAG, "esp_netif_set_ip_info failed! %d", err);
     return false;
   }
 
@@ -841,20 +875,20 @@ bool WiFiComponent::wifi_ap_ip_config_(optional<ManualIP> manual_ip) {
   start_address += 99;
   lease.start_ip = start_address;
   ESP_LOGV(TAG, "DHCP server IP lease start: %s", start_address.str().c_str());
-  start_address += 100;
+  start_address += 10;
   lease.end_ip = start_address;
   ESP_LOGV(TAG, "DHCP server IP lease end: %s", start_address.str().c_str());
   err = esp_netif_dhcps_option(s_ap_netif, ESP_NETIF_OP_SET, ESP_NETIF_REQUESTED_IP_ADDRESS, &lease, sizeof(lease));
 
   if (err != ESP_OK) {
-    ESP_LOGV(TAG, "esp_netif_dhcps_option failed! %d", err);
+    ESP_LOGE(TAG, "esp_netif_dhcps_option failed! %d", err);
     return false;
   }
 
   err = esp_netif_dhcps_start(s_ap_netif);
 
   if (err != ESP_OK) {
-    ESP_LOGV(TAG, "esp_netif_dhcps_start failed! %d", err);
+    ESP_LOGE(TAG, "esp_netif_dhcps_start failed! %d", err);
     return false;
   }
 
@@ -887,12 +921,12 @@ bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) {
 
   esp_err_t err = esp_wifi_set_config(WIFI_IF_AP, &conf);
   if (err != ESP_OK) {
-    ESP_LOGV(TAG, "esp_wifi_set_config failed! %d", err);
+    ESP_LOGE(TAG, "esp_wifi_set_config failed! %d", err);
     return false;
   }
 
   if (!this->wifi_ap_ip_config_(ap.get_manual_ip())) {
-    ESP_LOGV(TAG, "wifi_ap_ip_config_ failed!");
+    ESP_LOGE(TAG, "wifi_ap_ip_config_ failed!");
     return false;
   }
 
diff --git a/esphome/components/wifi/wifi_component_pico_w.cpp b/esphome/components/wifi/wifi_component_pico_w.cpp
index 2bb1af5489..4afcf2d78b 100644
--- a/esphome/components/wifi/wifi_component_pico_w.cpp
+++ b/esphome/components/wifi/wifi_component_pico_w.cpp
@@ -141,13 +141,29 @@ bool WiFiComponent::wifi_scan_start_(bool passive) {
 
 #ifdef USE_WIFI_AP
 bool WiFiComponent::wifi_ap_ip_config_(optional<ManualIP> manual_ip) {
-  // TODO:
-  return false;
+  esphome::network::IPAddress ip_address, gateway, subnet, dns;
+  if (manual_ip.has_value()) {
+    ip_address = manual_ip->static_ip;
+    gateway = manual_ip->gateway;
+    subnet = manual_ip->subnet;
+    dns = manual_ip->static_ip;
+  } else {
+    ip_address = network::IPAddress(192, 168, 4, 1);
+    gateway = network::IPAddress(192, 168, 4, 1);
+    subnet = network::IPAddress(255, 255, 255, 0);
+    dns = network::IPAddress(192, 168, 4, 1);
+  }
+  WiFi.config(ip_address, dns, gateway, subnet);
+  return true;
 }
 
 bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) {
   if (!this->wifi_mode_({}, true))
     return false;
+  if (!this->wifi_ap_ip_config_(ap.get_manual_ip())) {
+    ESP_LOGV(TAG, "wifi_ap_ip_config_ failed!");
+    return false;
+  }
 
   WiFi.beginAP(ap.get_ssid().c_str(), ap.get_password().c_str(), ap.get_channel().value_or(1));
 
diff --git a/esphome/components/wireguard/__init__.py b/esphome/components/wireguard/__init__.py
index 5d5f620b51..16d0d0226e 100644
--- a/esphome/components/wireguard/__init__.py
+++ b/esphome/components/wireguard/__init__.py
@@ -132,7 +132,7 @@ async def to_code(config):
     # the '+1' modifier is relative to the device's own address that will
     # be automatically added to the provided list.
     cg.add_build_flag(f"-DCONFIG_WIREGUARD_MAX_SRC_IPS={len(allowed_ips) + 1}")
-    cg.add_library("droscy/esp_wireguard", "0.4.1")
+    cg.add_library("droscy/esp_wireguard", "0.4.2")
 
     await cg.register_component(var, config)
 
diff --git a/esphome/config_helpers.py b/esphome/config_helpers.py
index b5e0b26143..54242bc259 100644
--- a/esphome/config_helpers.py
+++ b/esphome/config_helpers.py
@@ -58,17 +58,21 @@ def merge_config(full_old, full_new):
             ids = {
                 v_id: i
                 for i, v in enumerate(res)
-                if (v_id := v.get(CONF_ID)) and isinstance(v_id, str)
+                if isinstance(v, dict)
+                and (v_id := v.get(CONF_ID))
+                and isinstance(v_id, str)
             }
             extend_ids = {
                 v_id.value: i
                 for i, v in enumerate(res)
-                if (v_id := v.get(CONF_ID)) and isinstance(v_id, Extend)
+                if isinstance(v, dict)
+                and (v_id := v.get(CONF_ID))
+                and isinstance(v_id, Extend)
             }
 
             ids_to_delete = []
             for v in new:
-                if new_id := v.get(CONF_ID):
+                if isinstance(v, dict) and (new_id := v.get(CONF_ID)):
                     if isinstance(new_id, Extend):
                         new_id = new_id.value
                         if new_id in ids:
diff --git a/esphome/const.py b/esphome/const.py
index 9c4e451029..faf6ce19fa 100644
--- a/esphome/const.py
+++ b/esphome/const.py
@@ -1,6 +1,6 @@
 """Constants used by esphome."""
 
-__version__ = "2024.7.0-dev"
+__version__ = "2024.8.0-dev"
 
 ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
 VALID_SUBSTITUTIONS_CHARACTERS = (
@@ -355,6 +355,7 @@ CONF_HUMIDITY_SENSOR = "humidity_sensor"
 CONF_HYSTERESIS = "hysteresis"
 CONF_I2C = "i2c"
 CONF_I2C_ID = "i2c_id"
+CONF_IAQ_ACCURACY = "iaq_accuracy"
 CONF_IBEACON_MAJOR = "ibeacon_major"
 CONF_IBEACON_MINOR = "ibeacon_minor"
 CONF_IBEACON_UUID = "ibeacon_uuid"
@@ -719,6 +720,7 @@ CONF_RX_BUFFER_SIZE = "rx_buffer_size"
 CONF_RX_ONLY = "rx_only"
 CONF_RX_PIN = "rx_pin"
 CONF_SAFE_MODE = "safe_mode"
+CONF_SAMPLE_RATE = "sample_rate"
 CONF_SAMSUNG = "samsung"
 CONF_SATELLITES = "satellites"
 CONF_SCAN = "scan"
@@ -1070,6 +1072,7 @@ DEVICE_CLASS_BUTTON = "button"
 DEVICE_CLASS_CARBON_DIOXIDE = "carbon_dioxide"
 DEVICE_CLASS_CARBON_MONOXIDE = "carbon_monoxide"
 DEVICE_CLASS_COLD = "cold"
+DEVICE_CLASS_CONDUCTIVITY = "conductivity"
 DEVICE_CLASS_CONNECTIVITY = "connectivity"
 DEVICE_CLASS_CURRENT = "current"
 DEVICE_CLASS_CURTAIN = "curtain"
diff --git a/esphome/core/defines.h b/esphome/core/defines.h
index 1e6f3517db..4831ed2c9e 100644
--- a/esphome/core/defines.h
+++ b/esphome/core/defines.h
@@ -86,6 +86,7 @@
 #define USE_ESP32_BLE_SERVER
 #define USE_ESP32_CAMERA
 #define USE_IMPROV
+#define USE_MICRO_WAKE_WORD_VAD
 #define USE_MICROPHONE
 #define USE_PSRAM
 #define USE_SOCKET_IMPL_BSD_SOCKETS
diff --git a/esphome/core/helpers.cpp b/esphome/core/helpers.cpp
index dee771d4e9..e75b06ccd3 100644
--- a/esphome/core/helpers.cpp
+++ b/esphome/core/helpers.cpp
@@ -78,7 +78,7 @@ static const uint16_t CRC16_1021_BE_LUT_H[] = {0x0000, 0x1231, 0x2462, 0x3653, 0
 
 // STL backports
 
-#if _GLIBCXX_RELEASE < 7
+#if _GLIBCXX_RELEASE < 8
 std::string to_string(int value) { return str_snprintf("%d", 32, value); }                   // NOLINT
 std::string to_string(long value) { return str_snprintf("%ld", 32, value); }                 // NOLINT
 std::string to_string(long long value) { return str_snprintf("%lld", 32, value); }           // NOLINT
@@ -93,7 +93,7 @@ std::string to_string(long double value) { return str_snprintf("%Lf", 32, value)
 // Mathematics
 
 float lerp(float completion, float start, float end) { return start + (end - start) * completion; }
-uint8_t crc8(uint8_t *data, uint8_t len) {
+uint8_t crc8(const uint8_t *data, uint8_t len) {
   uint8_t crc = 0;
 
   while ((len--) != 0u) {
diff --git a/esphome/core/helpers.h b/esphome/core/helpers.h
index 4af840f77b..b4ad22b083 100644
--- a/esphome/core/helpers.h
+++ b/esphome/core/helpers.h
@@ -155,7 +155,7 @@ template<typename T, typename U> T remap(U value, U min, U max, T min_out, T max
 }
 
 /// Calculate a CRC-8 checksum of \p data with size \p len.
-uint8_t crc8(uint8_t *data, uint8_t len);
+uint8_t crc8(const uint8_t *data, uint8_t len);
 
 /// Calculate a CRC-16 checksum of \p data with size \p len.
 uint16_t crc16(const uint8_t *data, uint16_t len, uint16_t crc = 0xffff, uint16_t reverse_poly = 0xa001,
diff --git a/esphome/cpp_types.py b/esphome/cpp_types.py
index bd79d3b2f9..dab993f87f 100644
--- a/esphome/cpp_types.py
+++ b/esphome/cpp_types.py
@@ -10,6 +10,7 @@ int_ = global_ns.namespace("int")
 std_ns = global_ns.namespace("std")
 std_shared_ptr = std_ns.class_("shared_ptr")
 std_string = std_ns.class_("string")
+std_string_ref = std_ns.namespace("string &")
 std_vector = std_ns.class_("vector")
 uint8 = global_ns.namespace("uint8_t")
 uint16 = global_ns.namespace("uint16_t")
diff --git a/esphome/external_files.py b/esphome/external_files.py
index a1422d02b1..f8eb1dcabe 100644
--- a/esphome/external_files.py
+++ b/esphome/external_files.py
@@ -7,6 +7,7 @@ from datetime import datetime
 import requests
 import esphome.config_validation as cv
 from esphome.core import CORE, TimePeriodSeconds
+from esphome.const import __version__
 
 _LOGGER = logging.getLogger(__name__)
 CODEOWNERS = ["@landonr"]
@@ -75,3 +76,28 @@ def compute_local_file_dir(domain: str) -> Path:
     base_directory.mkdir(parents=True, exist_ok=True)
 
     return base_directory
+
+
+def download_content(url: str, path: Path, timeout=NETWORK_TIMEOUT) -> None:
+    if not has_remote_file_changed(url, path):
+        _LOGGER.debug("Remote file has not changed %s", url)
+        return
+
+    _LOGGER.debug(
+        "Remote file has changed, downloading from %s to %s",
+        url,
+        path,
+    )
+
+    try:
+        req = requests.get(
+            url,
+            timeout=timeout,
+            headers={"User-agent": f"ESPHome/{__version__} (https://esphome.io)"},
+        )
+        req.raise_for_status()
+    except requests.exceptions.RequestException as e:
+        raise cv.Invalid(f"Could not download from {url}: {e}")
+
+    path.parent.mkdir(parents=True, exist_ok=True)
+    path.write_bytes(req.content)
diff --git a/esphome/idf_component.yml b/esphome/idf_component.yml
index 2195e1e512..6f49978757 100644
--- a/esphome/idf_component.yml
+++ b/esphome/idf_component.yml
@@ -1,6 +1,7 @@
 dependencies:
   esp-tflite-micro:
     git: https://github.com/espressif/esp-tflite-micro.git
+    version: v1.3.1
   esp32_camera:
     git: https://github.com/espressif/esp32-camera.git
     version: v2.0.9
diff --git a/platformio.ini b/platformio.ini
index ee82dee243..fc7f35b6c3 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -39,7 +39,7 @@ lib_deps =
     bblanchon/ArduinoJson@6.18.5           ; json
     wjtje/qr-code-generator-library@1.7.0  ; qr_code
     functionpointer/arduino-MLX90393@1.0.0 ; mlx90393
-    pavlodn/HaierProtocol@0.9.28           ; haier
+    pavlodn/HaierProtocol@0.9.31           ; haier
     ; This is using the repository until a new release is published to PlatformIO
     https://github.com/Sensirion/arduino-gas-index-algorithm.git#3.2.1 ; Sensirion Gas Index Algorithm Arduino Library
 build_flags =
@@ -64,8 +64,8 @@ lib_deps =
     freekode/TM1651@1.0.1                                 ; tm1651
     glmnet/Dsmr@0.7                                       ; dsmr
     rweather/Crypto@0.4.0                                 ; dsmr
-    dudanov/MideaUART@1.1.8                               ; midea
-    tonia/HeatpumpIR@1.0.23                               ; heatpumpir
+    dudanov/MideaUART@1.1.9                               ; midea
+    tonia/HeatpumpIR@1.0.27                               ; heatpumpir
 build_flags =
     ${common.build_flags}
     -DUSE_ARDUINO
@@ -93,8 +93,8 @@ lib_deps =
     ESP8266HTTPClient                     ; http_request (Arduino built-in)
     ESP8266mDNS                           ; mdns (Arduino built-in)
     DNSServer                             ; captive_portal (Arduino built-in)
-    crankyoldgit/IRremoteESP8266@~2.8.4   ; heatpumpir
-    droscy/esp_wireguard@0.4.1            ; wireguard
+    droscy/esp_wireguard@0.4.2            ; wireguard
+
 build_flags =
     ${common:arduino.build_flags}
     -Wno-nonnull-compare
@@ -123,8 +123,8 @@ lib_deps =
     ESPmDNS                              ; mdns (Arduino built-in)
     DNSServer                            ; captive_portal (Arduino built-in)
     esphome/ESP32-audioI2S@2.0.7         ; i2s_audio
-    crankyoldgit/IRremoteESP8266@~2.8.4  ; heatpumpir
-    droscy/esp_wireguard@0.4.1           ; wireguard
+    droscy/esp_wireguard@0.4.2          ; wireguard
+
 build_flags =
     ${common:arduino.build_flags}
     -DUSE_ESP32
@@ -142,7 +142,8 @@ platform_packages =
 framework = espidf
 lib_deps =
     ${common:idf.lib_deps}
-    droscy/esp_wireguard@0.4.1    ; wireguard
+    droscy/esp_wireguard@0.4.2              ; wireguard
+    kahrendt/ESPMicroSpeechFeatures@1.0.0   ; micro_wake_word
 build_flags =
     ${common:idf.build_flags}
     -Wno-nonnull-compare
@@ -174,7 +175,7 @@ extends = common:arduino
 platform = libretiny
 framework = arduino
 lib_deps =
-    droscy/esp_wireguard@0.4.1    ; wireguard
+    droscy/esp_wireguard@0.4.2    ; wireguard
 build_flags =
     ${common:arduino.build_flags}
     -DUSE_LIBRETINY
diff --git a/requirements.txt b/requirements.txt
index a7b08f8a14..0cbe5e7265 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -12,7 +12,7 @@ pyserial==3.5
 platformio==6.1.15  # When updating platformio, also update Dockerfile
 esptool==4.7.0
 click==8.1.7
-esphome-dashboard==20240613.0
+esphome-dashboard==20240620.0
 aioesphomeapi==24.3.0
 zeroconf==0.132.2
 python-magic==0.4.27
diff --git a/script/extract_automations.py b/script/extract_automations.py
new file mode 100755
index 0000000000..943eb7110a
--- /dev/null
+++ b/script/extract_automations.py
@@ -0,0 +1,25 @@
+#!/usr/bin/env python3
+
+import json
+
+from helpers import git_ls_files
+
+from esphome.automation import ACTION_REGISTRY, CONDITION_REGISTRY
+from esphome.pins import PIN_SCHEMA_REGISTRY
+
+list_components = __import__("list-components")
+
+
+if __name__ == "__main__":
+    files = git_ls_files()
+    files = filter(list_components.filter_component_files, files)
+
+    components = list_components.get_components(files, True)
+
+    dump = {
+        "actions": sorted(list(ACTION_REGISTRY.keys())),
+        "conditions": sorted(list(CONDITION_REGISTRY.keys())),
+        "pin_providers": sorted(list(PIN_SCHEMA_REGISTRY.keys())),
+    }
+
+    print(json.dumps(dump, indent=2))
diff --git a/script/list-components.py b/script/list-components.py
index 5b5fa5811f..559919bb8a 100755
--- a/script/list-components.py
+++ b/script/list-components.py
@@ -50,6 +50,7 @@ def create_components_graph():
         {KEY_TARGET_FRAMEWORK: "arduino", KEY_TARGET_PLATFORM: None},
         {KEY_TARGET_FRAMEWORK: "esp-idf", KEY_TARGET_PLATFORM: None},
         {KEY_TARGET_FRAMEWORK: None, KEY_TARGET_PLATFORM: PLATFORM_ESP32},
+        {KEY_TARGET_FRAMEWORK: None, KEY_TARGET_PLATFORM: PLATFORM_ESP8266},
     ]
     CORE.data[KEY_CORE] = TARGET_CONFIGURATIONS[0]
 
@@ -119,10 +120,30 @@ def find_children_of_component(components_graph, component_name, depth=0):
     return list(set(children))
 
 
+def get_components(files: list[str], get_dependencies: bool = False):
+    components = extract_component_names_array_from_files_array(files)
+
+    if get_dependencies:
+        components_graph = create_components_graph()
+
+        all_components = components.copy()
+        for c in components:
+            all_components.extend(find_children_of_component(components_graph, c))
+        # Remove duplicate values
+        all_changed_components = list(set(all_components))
+
+        return sorted(all_changed_components)
+
+    return sorted(components)
+
+
 def main():
     parser = argparse.ArgumentParser()
     parser.add_argument(
-        "-c", "--changed", action="store_true", help="Only run on changed files"
+        "-c",
+        "--changed",
+        action="store_true",
+        help="List all components required for testing based on changes",
     )
     parser.add_argument(
         "-b", "--branch", help="Branch to compare changed files against"
@@ -140,26 +161,12 @@ def main():
             changed = changed_files(args.branch)
         else:
             changed = changed_files()
-        files = [f for f in files if f in changed]
+        # If any base test file(s) changed, there's no need to filter out components
+        if not any("tests/test_build_components" in file for file in changed):
+            files = [f for f in files if f in changed]
 
-    components = extract_component_names_array_from_files_array(files)
-
-    if args.changed:
-        components_graph = create_components_graph()
-
-        all_changed_components = components.copy()
-        for c in components:
-            all_changed_components.extend(
-                find_children_of_component(components_graph, c)
-            )
-        # Remove duplicate values
-        all_changed_components = list(set(all_changed_components))
-
-        for c in sorted(all_changed_components):
-            print(c)
-    else:
-        for c in sorted(components):
-            print(c)
+    for c in get_components(files, args.changed):
+        print(c)
 
 
 if __name__ == "__main__":
diff --git a/script/test_build_components b/script/test_build_components
index f82dd5c3b6..e885294b99 100755
--- a/script/test_build_components
+++ b/script/test_build_components
@@ -7,12 +7,13 @@ set -e
 # - `c` - Component folder name to test. Default `*`.
 esphome_command="compile"
 target_component="*"
-while getopts e:c: flag
+while getopts e:c:t: flag
 do
     case $flag in
         e) esphome_command=${OPTARG};;
         c) target_component=${OPTARG};;
-        \?) echo "Usage: $0 [-e <config|compile|clean>] [-c <string>]" 1>&2; exit 1;;
+        t) requested_target_platform=${OPTARG};;
+        \?) echo "Usage: $0 [-e <config|compile|clean>] [-c <string>] [-t <string>]" 1>&2; exit 1;;
     esac
 done
 
@@ -23,9 +24,13 @@ if ! [ -d "./tests/test_build_components/build" ]; then
 fi
 
 start_esphome() {
+  if [ -n "$requested_target_platform" ] && [ "$requested_target_platform" != "$target_platform" ]; then
+    echo "Skiping $target_platform"
+    return
+  fi
   # create dynamic yaml file in `build` folder.
-  # `./tests/test_build_components/build/[target_component].[test_name].[target_platform].yaml`
-  component_test_file="./tests/test_build_components/build/$target_component.$test_name.$target_platform.yaml"
+  # `./tests/test_build_components/build/[target_component].[test_name].[target_platform_with_version].yaml`
+  component_test_file="./tests/test_build_components/build/$target_component.$test_name.$target_platform_with_version.yaml"
 
   cp $target_platform_file $component_test_file
   if [[ "$OSTYPE" == "darwin"* ]]; then
@@ -36,7 +41,7 @@ start_esphome() {
   fi
 
   # Start esphome process
-  echo "> [$target_component] [$test_name] [$target_platform]"
+  echo "> [$target_component] [$test_name] [$target_platform_with_version]"
   set -x
   # TODO: Validate escape of Command line substitution value
   python -m esphome -s component_name $target_component -s component_dir ../../components/$target_component -s test_name $test_name -s target_platform $target_platform $esphome_command $component_test_file
@@ -76,16 +81,17 @@ for f in ./tests/components/$target_component/*.*.yaml; do
     # 2. `./tests/test_build_components/build_components_base.[target_platform]-ard.yaml`
     target_platform_file="./tests/test_build_components/build_components_base.$target_platform.yaml"
     if ! [ -f "$target_platform_file" ]; then
-      # Try find arduino test framework as platform.
-      target_platform_ard="$target_platform-ard"
-      target_platform_file="./tests/test_build_components/build_components_base.$target_platform_ard.yaml"
-      if ! [ -f "$target_platform_file" ]; then
-        echo "No base test file [./tests/test_build_components/build_components_base.$target_platform.yaml, ./tests/build_components_base.$target_platform_ard.yaml] for component test [$f] found."
-        exit 1
-      fi
-      target_platform=$target_platform_ard
+      echo "No base test file [./tests/test_build_components/build_components_base.$target_platform.yaml] for component test [$f] found."
+      exit 1
     fi
 
-    start_esphome
+    for target_platform_file in ./tests/test_build_components/build_components_base.$target_platform*.yaml; do
+      # trim off "./tests/test_build_components/build_components_base." prefix
+      target_platform_with_version=${target_platform_file:52}
+      # ...now remove suffix starting with "." leaving just the test target hardware and software platform (possibly with version)
+      # For example: "esp32-s3-idf-50"
+      target_platform_with_version=${target_platform_with_version%.*}
+      start_esphome
+    done
   fi
 done
diff --git a/tests/components/a01nyub/test.esp8266.yaml b/tests/components/a01nyub/common.yaml
similarity index 73%
rename from tests/components/a01nyub/test.esp8266.yaml
rename to tests/components/a01nyub/common.yaml
index 3132f77136..0717acfff7 100644
--- a/tests/components/a01nyub/test.esp8266.yaml
+++ b/tests/components/a01nyub/common.yaml
@@ -1,9 +1,7 @@
 uart:
   - id: uart_a01nyub
-    tx_pin:
-      number: 4
-    rx_pin:
-      number: 5
+    tx_pin: ${tx_pin}
+    rx_pin: ${rx_pin}
     baud_rate: 9600
 
 sensor:
diff --git a/tests/components/uponor_smatrix/test.esp32.yaml b/tests/components/a01nyub/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/uponor_smatrix/test.esp32.yaml
rename to tests/components/a01nyub/test.esp32-ard.yaml
diff --git a/tests/components/uponor_smatrix/test.esp32-c3.yaml b/tests/components/a01nyub/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/uponor_smatrix/test.esp32-c3.yaml
rename to tests/components/a01nyub/test.esp32-c3-ard.yaml
diff --git a/tests/components/a01nyub/test.esp32-c3-idf.yaml b/tests/components/a01nyub/test.esp32-c3-idf.yaml
index 3132f77136..b516342f3b 100644
--- a/tests/components/a01nyub/test.esp32-c3-idf.yaml
+++ b/tests/components/a01nyub/test.esp32-c3-idf.yaml
@@ -1,13 +1,5 @@
-uart:
-  - id: uart_a01nyub
-    tx_pin:
-      number: 4
-    rx_pin:
-      number: 5
-    baud_rate: 9600
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
 
-sensor:
-  - platform: a01nyub
-    id: a01nyub_sensor
-    name: a01nyub Distance
-    uart_id: uart_a01nyub
+<<: !include common.yaml
diff --git a/tests/components/a01nyub/test.esp32-c3.yaml b/tests/components/a01nyub/test.esp32-c3.yaml
deleted file mode 100644
index 3132f77136..0000000000
--- a/tests/components/a01nyub/test.esp32-c3.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-uart:
-  - id: uart_a01nyub
-    tx_pin:
-      number: 4
-    rx_pin:
-      number: 5
-    baud_rate: 9600
-
-sensor:
-  - platform: a01nyub
-    id: a01nyub_sensor
-    name: a01nyub Distance
-    uart_id: uart_a01nyub
diff --git a/tests/components/a01nyub/test.esp32-idf.yaml b/tests/components/a01nyub/test.esp32-idf.yaml
index 79fc9c5fbf..f486544afa 100644
--- a/tests/components/a01nyub/test.esp32-idf.yaml
+++ b/tests/components/a01nyub/test.esp32-idf.yaml
@@ -1,13 +1,5 @@
-uart:
-  - id: uart_a01nyub
-    tx_pin:
-      number: 17
-    rx_pin:
-      number: 16
-    baud_rate: 9600
+substitutions:
+  tx_pin: GPIO17
+  rx_pin: GPIO16
 
-sensor:
-  - platform: a01nyub
-    id: a01nyub_sensor
-    name: a01nyub Distance
-    uart_id: uart_a01nyub
+<<: !include common.yaml
diff --git a/tests/components/a01nyub/test.esp32.yaml b/tests/components/a01nyub/test.esp32.yaml
deleted file mode 100644
index 79fc9c5fbf..0000000000
--- a/tests/components/a01nyub/test.esp32.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-uart:
-  - id: uart_a01nyub
-    tx_pin:
-      number: 17
-    rx_pin:
-      number: 16
-    baud_rate: 9600
-
-sensor:
-  - platform: a01nyub
-    id: a01nyub_sensor
-    name: a01nyub Distance
-    uart_id: uart_a01nyub
diff --git a/tests/components/uponor_smatrix/test.esp8266.yaml b/tests/components/a01nyub/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/uponor_smatrix/test.esp8266.yaml
rename to tests/components/a01nyub/test.esp8266-ard.yaml
diff --git a/tests/components/uponor_smatrix/test.rp2040.yaml b/tests/components/a01nyub/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/uponor_smatrix/test.rp2040.yaml
rename to tests/components/a01nyub/test.rp2040-ard.yaml
diff --git a/tests/components/a01nyub/test.rp2040.yaml b/tests/components/a01nyub/test.rp2040.yaml
deleted file mode 100644
index 3132f77136..0000000000
--- a/tests/components/a01nyub/test.rp2040.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-uart:
-  - id: uart_a01nyub
-    tx_pin:
-      number: 4
-    rx_pin:
-      number: 5
-    baud_rate: 9600
-
-sensor:
-  - platform: a01nyub
-    id: a01nyub_sensor
-    name: a01nyub Distance
-    uart_id: uart_a01nyub
diff --git a/tests/components/a02yyuw/test.esp32.yaml b/tests/components/a02yyuw/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/a02yyuw/test.esp32.yaml
rename to tests/components/a02yyuw/test.esp32-ard.yaml
diff --git a/tests/components/a02yyuw/test.esp32-c3.yaml b/tests/components/a02yyuw/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/a02yyuw/test.esp32-c3.yaml
rename to tests/components/a02yyuw/test.esp32-c3-ard.yaml
diff --git a/tests/components/a02yyuw/test.esp8266.yaml b/tests/components/a02yyuw/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/a02yyuw/test.esp8266.yaml
rename to tests/components/a02yyuw/test.esp8266-ard.yaml
diff --git a/tests/components/a02yyuw/test.rp2040.yaml b/tests/components/a02yyuw/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/a02yyuw/test.rp2040.yaml
rename to tests/components/a02yyuw/test.rp2040-ard.yaml
diff --git a/tests/components/a4988/test.esp32.yaml b/tests/components/a4988/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/a4988/test.esp32.yaml
rename to tests/components/a4988/test.esp32-ard.yaml
diff --git a/tests/components/a4988/test.esp32-c3.yaml b/tests/components/a4988/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/a4988/test.esp32-c3.yaml
rename to tests/components/a4988/test.esp32-c3-ard.yaml
diff --git a/tests/components/a4988/test.esp8266.yaml b/tests/components/a4988/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/a4988/test.esp8266.yaml
rename to tests/components/a4988/test.esp8266-ard.yaml
diff --git a/tests/components/a4988/test.rp2040.yaml b/tests/components/a4988/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/a4988/test.rp2040.yaml
rename to tests/components/a4988/test.rp2040-ard.yaml
diff --git a/tests/components/absolute_humidity/test.esp32-c3.yaml b/tests/components/absolute_humidity/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/absolute_humidity/test.esp32-c3.yaml
rename to tests/components/absolute_humidity/test.esp32-ard.yaml
diff --git a/tests/components/absolute_humidity/test.esp32.yaml b/tests/components/absolute_humidity/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/absolute_humidity/test.esp32.yaml
rename to tests/components/absolute_humidity/test.esp32-c3-ard.yaml
diff --git a/tests/components/absolute_humidity/test.esp8266.yaml b/tests/components/absolute_humidity/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/absolute_humidity/test.esp8266.yaml
rename to tests/components/absolute_humidity/test.esp8266-ard.yaml
diff --git a/tests/components/absolute_humidity/test.rp2040.yaml b/tests/components/absolute_humidity/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/absolute_humidity/test.rp2040.yaml
rename to tests/components/absolute_humidity/test.rp2040-ard.yaml
diff --git a/tests/components/ac_dimmer/test.esp32.yaml b/tests/components/ac_dimmer/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ac_dimmer/test.esp32.yaml
rename to tests/components/ac_dimmer/test.esp32-ard.yaml
diff --git a/tests/components/ac_dimmer/test.esp32-c3.yaml b/tests/components/ac_dimmer/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ac_dimmer/test.esp32-c3.yaml
rename to tests/components/ac_dimmer/test.esp32-c3-ard.yaml
diff --git a/tests/components/ac_dimmer/test.esp8266.yaml b/tests/components/ac_dimmer/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ac_dimmer/test.esp8266.yaml
rename to tests/components/ac_dimmer/test.esp8266-ard.yaml
diff --git a/tests/components/ac_dimmer/test.rp2040.yaml b/tests/components/ac_dimmer/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ac_dimmer/test.rp2040.yaml
rename to tests/components/ac_dimmer/test.rp2040-ard.yaml
diff --git a/tests/components/adc/test.esp32.yaml b/tests/components/adc/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/adc/test.esp32.yaml
rename to tests/components/adc/test.esp32-ard.yaml
diff --git a/tests/components/adc/test.esp32-c3.yaml b/tests/components/adc/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/adc/test.esp32-c3.yaml
rename to tests/components/adc/test.esp32-c3-ard.yaml
diff --git a/tests/components/adc/test.esp32-s2.yaml b/tests/components/adc/test.esp32-s2-ard.yaml
similarity index 100%
rename from tests/components/adc/test.esp32-s2.yaml
rename to tests/components/adc/test.esp32-s2-ard.yaml
diff --git a/tests/components/adc/test.esp32-s3.yaml b/tests/components/adc/test.esp32-s3-ard.yaml
similarity index 100%
rename from tests/components/adc/test.esp32-s3.yaml
rename to tests/components/adc/test.esp32-s3-ard.yaml
diff --git a/tests/components/adc/test.esp8266.yaml b/tests/components/adc/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/adc/test.esp8266.yaml
rename to tests/components/adc/test.esp8266-ard.yaml
diff --git a/tests/components/adc/test.rp2040.yaml b/tests/components/adc/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/adc/test.rp2040.yaml
rename to tests/components/adc/test.rp2040-ard.yaml
diff --git a/tests/components/adc128s102/test.esp32.yaml b/tests/components/adc128s102/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/adc128s102/test.esp32.yaml
rename to tests/components/adc128s102/test.esp32-ard.yaml
diff --git a/tests/components/adc128s102/test.esp32-c3.yaml b/tests/components/adc128s102/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/adc128s102/test.esp32-c3.yaml
rename to tests/components/adc128s102/test.esp32-c3-ard.yaml
diff --git a/tests/components/adc128s102/test.esp8266.yaml b/tests/components/adc128s102/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/adc128s102/test.esp8266.yaml
rename to tests/components/adc128s102/test.esp8266-ard.yaml
diff --git a/tests/components/adc128s102/test.rp2040.yaml b/tests/components/adc128s102/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/adc128s102/test.rp2040.yaml
rename to tests/components/adc128s102/test.rp2040-ard.yaml
diff --git a/tests/components/addressable_light/test.esp32.yaml b/tests/components/addressable_light/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/addressable_light/test.esp32.yaml
rename to tests/components/addressable_light/test.esp32-ard.yaml
diff --git a/tests/components/addressable_light/test.esp32-c3.yaml b/tests/components/addressable_light/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/addressable_light/test.esp32-c3.yaml
rename to tests/components/addressable_light/test.esp32-c3-ard.yaml
diff --git a/tests/components/ade7880/test.esp32.yaml b/tests/components/ade7880/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ade7880/test.esp32.yaml
rename to tests/components/ade7880/test.esp32-ard.yaml
diff --git a/tests/components/ade7880/test.esp32-c3.yaml b/tests/components/ade7880/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ade7880/test.esp32-c3.yaml
rename to tests/components/ade7880/test.esp32-c3-ard.yaml
diff --git a/tests/components/ade7880/test.esp8266.yaml b/tests/components/ade7880/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ade7880/test.esp8266.yaml
rename to tests/components/ade7880/test.esp8266-ard.yaml
diff --git a/tests/components/ade7880/test.rp2040.yaml b/tests/components/ade7880/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ade7880/test.rp2040.yaml
rename to tests/components/ade7880/test.rp2040-ard.yaml
diff --git a/tests/components/ade7953_i2c/test.esp32.yaml b/tests/components/ade7953_i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ade7953_i2c/test.esp32.yaml
rename to tests/components/ade7953_i2c/test.esp32-ard.yaml
diff --git a/tests/components/ade7953_i2c/test.esp32-c3.yaml b/tests/components/ade7953_i2c/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ade7953_i2c/test.esp32-c3.yaml
rename to tests/components/ade7953_i2c/test.esp32-c3-ard.yaml
diff --git a/tests/components/ade7953_i2c/test.esp8266.yaml b/tests/components/ade7953_i2c/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ade7953_i2c/test.esp8266.yaml
rename to tests/components/ade7953_i2c/test.esp8266-ard.yaml
diff --git a/tests/components/ade7953_i2c/test.rp2040.yaml b/tests/components/ade7953_i2c/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ade7953_i2c/test.rp2040.yaml
rename to tests/components/ade7953_i2c/test.rp2040-ard.yaml
diff --git a/tests/components/ade7953_spi/test.esp32.yaml b/tests/components/ade7953_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ade7953_spi/test.esp32.yaml
rename to tests/components/ade7953_spi/test.esp32-ard.yaml
diff --git a/tests/components/ade7953_spi/test.esp32-c3.yaml b/tests/components/ade7953_spi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ade7953_spi/test.esp32-c3.yaml
rename to tests/components/ade7953_spi/test.esp32-c3-ard.yaml
diff --git a/tests/components/ade7953_spi/test.esp8266.yaml b/tests/components/ade7953_spi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ade7953_spi/test.esp8266.yaml
rename to tests/components/ade7953_spi/test.esp8266-ard.yaml
diff --git a/tests/components/ade7953_spi/test.rp2040.yaml b/tests/components/ade7953_spi/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ade7953_spi/test.rp2040.yaml
rename to tests/components/ade7953_spi/test.rp2040-ard.yaml
diff --git a/tests/components/ads1115/test.esp32.yaml b/tests/components/ads1115/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ads1115/test.esp32.yaml
rename to tests/components/ads1115/test.esp32-ard.yaml
diff --git a/tests/components/ads1115/test.esp32-c3.yaml b/tests/components/ads1115/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ads1115/test.esp32-c3.yaml
rename to tests/components/ads1115/test.esp32-c3-ard.yaml
diff --git a/tests/components/ads1115/test.esp8266.yaml b/tests/components/ads1115/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ads1115/test.esp8266.yaml
rename to tests/components/ads1115/test.esp8266-ard.yaml
diff --git a/tests/components/ads1115/test.rp2040.yaml b/tests/components/ads1115/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ads1115/test.rp2040.yaml
rename to tests/components/ads1115/test.rp2040-ard.yaml
diff --git a/tests/components/ags10/test.esp32.yaml b/tests/components/ags10/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ags10/test.esp32.yaml
rename to tests/components/ags10/test.esp32-ard.yaml
diff --git a/tests/components/ags10/test.esp32-c3.yaml b/tests/components/ags10/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ags10/test.esp32-c3.yaml
rename to tests/components/ags10/test.esp32-c3-ard.yaml
diff --git a/tests/components/ags10/test.esp8266.yaml b/tests/components/ags10/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ags10/test.esp8266.yaml
rename to tests/components/ags10/test.esp8266-ard.yaml
diff --git a/tests/components/aht10/test.esp32.yaml b/tests/components/aht10/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/aht10/test.esp32.yaml
rename to tests/components/aht10/test.esp32-ard.yaml
diff --git a/tests/components/aht10/test.esp32-c3.yaml b/tests/components/aht10/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/aht10/test.esp32-c3.yaml
rename to tests/components/aht10/test.esp32-c3-ard.yaml
diff --git a/tests/components/aht10/test.esp8266.yaml b/tests/components/aht10/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/aht10/test.esp8266.yaml
rename to tests/components/aht10/test.esp8266-ard.yaml
diff --git a/tests/components/aht10/test.rp2040.yaml b/tests/components/aht10/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/aht10/test.rp2040.yaml
rename to tests/components/aht10/test.rp2040-ard.yaml
diff --git a/tests/components/airthings_wave_mini/test.esp32-c3.yaml b/tests/components/airthings_wave_mini/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/airthings_wave_mini/test.esp32-c3.yaml
rename to tests/components/airthings_wave_mini/test.esp32-ard.yaml
diff --git a/tests/components/airthings_wave_mini/test.esp32.yaml b/tests/components/airthings_wave_mini/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/airthings_wave_mini/test.esp32.yaml
rename to tests/components/airthings_wave_mini/test.esp32-c3-ard.yaml
diff --git a/tests/components/airthings_wave_plus/test.esp32-c3.yaml b/tests/components/airthings_wave_plus/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/airthings_wave_plus/test.esp32-c3.yaml
rename to tests/components/airthings_wave_plus/test.esp32-ard.yaml
diff --git a/tests/components/airthings_wave_plus/test.esp32.yaml b/tests/components/airthings_wave_plus/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/airthings_wave_plus/test.esp32.yaml
rename to tests/components/airthings_wave_plus/test.esp32-c3-ard.yaml
diff --git a/tests/components/alarm_control_panel/test.esp32-c3.yaml b/tests/components/alarm_control_panel/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/alarm_control_panel/test.esp32-c3.yaml
rename to tests/components/alarm_control_panel/test.esp32-ard.yaml
diff --git a/tests/components/alarm_control_panel/test.esp32.yaml b/tests/components/alarm_control_panel/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/alarm_control_panel/test.esp32.yaml
rename to tests/components/alarm_control_panel/test.esp32-c3-ard.yaml
diff --git a/tests/components/alarm_control_panel/test.esp8266.yaml b/tests/components/alarm_control_panel/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/alarm_control_panel/test.esp8266.yaml
rename to tests/components/alarm_control_panel/test.esp8266-ard.yaml
diff --git a/tests/components/alarm_control_panel/test.rp2040.yaml b/tests/components/alarm_control_panel/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/alarm_control_panel/test.rp2040.yaml
rename to tests/components/alarm_control_panel/test.rp2040-ard.yaml
diff --git a/tests/components/alpha3/test.esp32-c3.yaml b/tests/components/alpha3/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/alpha3/test.esp32-c3.yaml
rename to tests/components/alpha3/test.esp32-ard.yaml
diff --git a/tests/components/alpha3/test.esp32.yaml b/tests/components/alpha3/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/alpha3/test.esp32.yaml
rename to tests/components/alpha3/test.esp32-c3-ard.yaml
diff --git a/tests/components/am2315c/test.esp32.yaml b/tests/components/am2315c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/am2315c/test.esp32.yaml
rename to tests/components/am2315c/test.esp32-ard.yaml
diff --git a/tests/components/am2315c/test.esp32-c3.yaml b/tests/components/am2315c/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/am2315c/test.esp32-c3.yaml
rename to tests/components/am2315c/test.esp32-c3-ard.yaml
diff --git a/tests/components/am2315c/test.esp8266.yaml b/tests/components/am2315c/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/am2315c/test.esp8266.yaml
rename to tests/components/am2315c/test.esp8266-ard.yaml
diff --git a/tests/components/am2315c/test.rp2040.yaml b/tests/components/am2315c/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/am2315c/test.rp2040.yaml
rename to tests/components/am2315c/test.rp2040-ard.yaml
diff --git a/tests/components/am2320/test.esp32.yaml b/tests/components/am2320/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/am2320/test.esp32.yaml
rename to tests/components/am2320/test.esp32-ard.yaml
diff --git a/tests/components/am2320/test.esp32-c3.yaml b/tests/components/am2320/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/am2320/test.esp32-c3.yaml
rename to tests/components/am2320/test.esp32-c3-ard.yaml
diff --git a/tests/components/am2320/test.esp8266.yaml b/tests/components/am2320/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/am2320/test.esp8266.yaml
rename to tests/components/am2320/test.esp8266-ard.yaml
diff --git a/tests/components/am2320/test.rp2040.yaml b/tests/components/am2320/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/am2320/test.rp2040.yaml
rename to tests/components/am2320/test.rp2040-ard.yaml
diff --git a/tests/components/am43/test.esp32-c3.yaml b/tests/components/am43/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/am43/test.esp32-c3.yaml
rename to tests/components/am43/test.esp32-ard.yaml
diff --git a/tests/components/am43/test.esp32.yaml b/tests/components/am43/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/am43/test.esp32.yaml
rename to tests/components/am43/test.esp32-c3-ard.yaml
diff --git a/tests/components/analog_threshold/test.esp32-c3.yaml b/tests/components/analog_threshold/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/analog_threshold/test.esp32-c3.yaml
rename to tests/components/analog_threshold/test.esp32-ard.yaml
diff --git a/tests/components/analog_threshold/test.esp32.yaml b/tests/components/analog_threshold/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/analog_threshold/test.esp32.yaml
rename to tests/components/analog_threshold/test.esp32-c3-ard.yaml
diff --git a/tests/components/analog_threshold/test.esp8266.yaml b/tests/components/analog_threshold/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/analog_threshold/test.esp8266.yaml
rename to tests/components/analog_threshold/test.esp8266-ard.yaml
diff --git a/tests/components/analog_threshold/test.rp2040.yaml b/tests/components/analog_threshold/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/analog_threshold/test.rp2040.yaml
rename to tests/components/analog_threshold/test.rp2040-ard.yaml
diff --git a/tests/components/animation/test.esp32.yaml b/tests/components/animation/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/animation/test.esp32.yaml
rename to tests/components/animation/test.esp32-ard.yaml
diff --git a/tests/components/animation/test.esp32-c3.yaml b/tests/components/animation/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/animation/test.esp32-c3.yaml
rename to tests/components/animation/test.esp32-c3-ard.yaml
diff --git a/tests/components/animation/test.esp8266.yaml b/tests/components/animation/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/animation/test.esp8266.yaml
rename to tests/components/animation/test.esp8266-ard.yaml
diff --git a/tests/components/animation/test.rp2040.yaml b/tests/components/animation/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/animation/test.rp2040.yaml
rename to tests/components/animation/test.rp2040-ard.yaml
diff --git a/tests/components/anova/test.esp32-c3.yaml b/tests/components/anova/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/anova/test.esp32-c3.yaml
rename to tests/components/anova/test.esp32-ard.yaml
diff --git a/tests/components/anova/test.esp32.yaml b/tests/components/anova/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/anova/test.esp32.yaml
rename to tests/components/anova/test.esp32-c3-ard.yaml
diff --git a/tests/components/apds9960/test.esp32.yaml b/tests/components/apds9960/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/apds9960/test.esp32.yaml
rename to tests/components/apds9960/test.esp32-ard.yaml
diff --git a/tests/components/apds9960/test.esp32-c3.yaml b/tests/components/apds9960/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/apds9960/test.esp32-c3.yaml
rename to tests/components/apds9960/test.esp32-c3-ard.yaml
diff --git a/tests/components/apds9960/test.esp8266.yaml b/tests/components/apds9960/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/apds9960/test.esp8266.yaml
rename to tests/components/apds9960/test.esp8266-ard.yaml
diff --git a/tests/components/apds9960/test.rp2040.yaml b/tests/components/apds9960/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/apds9960/test.rp2040.yaml
rename to tests/components/apds9960/test.rp2040-ard.yaml
diff --git a/tests/components/api/common.yaml b/tests/components/api/common.yaml
index 3c56811b95..e0b900f92d 100644
--- a/tests/components/api/common.yaml
+++ b/tests/components/api/common.yaml
@@ -50,12 +50,12 @@ api:
       then:
         - logger.log:
             # yamllint disable rule:line-length
-            format: "Bool: %s (%u), Int: %d (%u), Float: %f (%u), String: %s (%u)"
+            format: "Bool: %s (%u), Int: %ld (%u), Float: %f (%u), String: %s (%u)"
             # yamllint enable rule:line-length
             args:
               - YESNO(bool_arr[0])
               - bool_arr.size()
-              - int_arr[0]
+              - (long) int_arr[0]
               - int_arr.size()
               - float_arr[0]
               - float_arr.size()
diff --git a/tests/components/api/test.esp32-c3.yaml b/tests/components/api/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/api/test.esp32-c3.yaml
rename to tests/components/api/test.esp32-ard.yaml
diff --git a/tests/components/api/test.esp32.yaml b/tests/components/api/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/api/test.esp32.yaml
rename to tests/components/api/test.esp32-c3-ard.yaml
diff --git a/tests/components/api/test.esp8266.yaml b/tests/components/api/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/api/test.esp8266.yaml
rename to tests/components/api/test.esp8266-ard.yaml
diff --git a/tests/components/api/test.rp2040.yaml b/tests/components/api/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/api/test.rp2040.yaml
rename to tests/components/api/test.rp2040-ard.yaml
diff --git a/tests/components/as3935_i2c/test.esp32.yaml b/tests/components/as3935_i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/as3935_i2c/test.esp32.yaml
rename to tests/components/as3935_i2c/test.esp32-ard.yaml
diff --git a/tests/components/as3935_i2c/test.esp32-c3.yaml b/tests/components/as3935_i2c/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/as3935_i2c/test.esp32-c3.yaml
rename to tests/components/as3935_i2c/test.esp32-c3-ard.yaml
diff --git a/tests/components/as3935_i2c/test.esp8266.yaml b/tests/components/as3935_i2c/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/as3935_i2c/test.esp8266.yaml
rename to tests/components/as3935_i2c/test.esp8266-ard.yaml
diff --git a/tests/components/as3935_i2c/test.rp2040.yaml b/tests/components/as3935_i2c/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/as3935_i2c/test.rp2040.yaml
rename to tests/components/as3935_i2c/test.rp2040-ard.yaml
diff --git a/tests/components/as3935_spi/test.esp32.yaml b/tests/components/as3935_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/as3935_spi/test.esp32.yaml
rename to tests/components/as3935_spi/test.esp32-ard.yaml
diff --git a/tests/components/as3935_spi/test.esp32-c3.yaml b/tests/components/as3935_spi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/as3935_spi/test.esp32-c3.yaml
rename to tests/components/as3935_spi/test.esp32-c3-ard.yaml
diff --git a/tests/components/as3935_spi/test.esp8266.yaml b/tests/components/as3935_spi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/as3935_spi/test.esp8266.yaml
rename to tests/components/as3935_spi/test.esp8266-ard.yaml
diff --git a/tests/components/as3935_spi/test.rp2040.yaml b/tests/components/as3935_spi/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/as3935_spi/test.rp2040.yaml
rename to tests/components/as3935_spi/test.rp2040-ard.yaml
diff --git a/tests/components/as5600/test.esp32.yaml b/tests/components/as5600/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/as5600/test.esp32.yaml
rename to tests/components/as5600/test.esp32-ard.yaml
diff --git a/tests/components/as5600/test.esp32-c3.yaml b/tests/components/as5600/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/as5600/test.esp32-c3.yaml
rename to tests/components/as5600/test.esp32-c3-ard.yaml
diff --git a/tests/components/as5600/test.esp8266.yaml b/tests/components/as5600/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/as5600/test.esp8266.yaml
rename to tests/components/as5600/test.esp8266-ard.yaml
diff --git a/tests/components/as5600/test.rp2040.yaml b/tests/components/as5600/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/as5600/test.rp2040.yaml
rename to tests/components/as5600/test.rp2040-ard.yaml
diff --git a/tests/components/as7341/test.esp32.yaml b/tests/components/as7341/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/as7341/test.esp32.yaml
rename to tests/components/as7341/test.esp32-ard.yaml
diff --git a/tests/components/as7341/test.esp32-c3.yaml b/tests/components/as7341/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/as7341/test.esp32-c3.yaml
rename to tests/components/as7341/test.esp32-c3-ard.yaml
diff --git a/tests/components/as7341/test.esp8266.yaml b/tests/components/as7341/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/as7341/test.esp8266.yaml
rename to tests/components/as7341/test.esp8266-ard.yaml
diff --git a/tests/components/as7341/test.rp2040.yaml b/tests/components/as7341/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/as7341/test.rp2040.yaml
rename to tests/components/as7341/test.rp2040-ard.yaml
diff --git a/tests/components/at581x/test.esp32.yaml b/tests/components/at581x/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/at581x/test.esp32.yaml
rename to tests/components/at581x/test.esp32-ard.yaml
diff --git a/tests/components/at581x/test.esp32-c3.yaml b/tests/components/at581x/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/at581x/test.esp32-c3.yaml
rename to tests/components/at581x/test.esp32-c3-ard.yaml
diff --git a/tests/components/at581x/test.esp8266.yaml b/tests/components/at581x/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/at581x/test.esp8266.yaml
rename to tests/components/at581x/test.esp8266-ard.yaml
diff --git a/tests/components/at581x/test.rp2040.yaml b/tests/components/at581x/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/at581x/test.rp2040.yaml
rename to tests/components/at581x/test.rp2040-ard.yaml
diff --git a/tests/components/atc_mithermometer/test.esp32-c3.yaml b/tests/components/atc_mithermometer/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/atc_mithermometer/test.esp32-c3.yaml
rename to tests/components/atc_mithermometer/test.esp32-ard.yaml
diff --git a/tests/components/atc_mithermometer/test.esp32.yaml b/tests/components/atc_mithermometer/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/atc_mithermometer/test.esp32.yaml
rename to tests/components/atc_mithermometer/test.esp32-c3-ard.yaml
diff --git a/tests/components/atm90e26/test.esp32.yaml b/tests/components/atm90e26/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/atm90e26/test.esp32.yaml
rename to tests/components/atm90e26/test.esp32-ard.yaml
diff --git a/tests/components/atm90e26/test.esp32-c3.yaml b/tests/components/atm90e26/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/atm90e26/test.esp32-c3.yaml
rename to tests/components/atm90e26/test.esp32-c3-ard.yaml
diff --git a/tests/components/atm90e26/test.esp8266.yaml b/tests/components/atm90e26/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/atm90e26/test.esp8266.yaml
rename to tests/components/atm90e26/test.esp8266-ard.yaml
diff --git a/tests/components/atm90e26/test.rp2040.yaml b/tests/components/atm90e26/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/atm90e26/test.rp2040.yaml
rename to tests/components/atm90e26/test.rp2040-ard.yaml
diff --git a/tests/components/atm90e32/test.esp32.yaml b/tests/components/atm90e32/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/atm90e32/test.esp32.yaml
rename to tests/components/atm90e32/test.esp32-ard.yaml
diff --git a/tests/components/atm90e32/test.esp32-c3.yaml b/tests/components/atm90e32/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/atm90e32/test.esp32-c3.yaml
rename to tests/components/atm90e32/test.esp32-c3-ard.yaml
diff --git a/tests/components/atm90e32/test.esp8266.yaml b/tests/components/atm90e32/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/atm90e32/test.esp8266.yaml
rename to tests/components/atm90e32/test.esp8266-ard.yaml
diff --git a/tests/components/atm90e32/test.rp2040.yaml b/tests/components/atm90e32/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/atm90e32/test.rp2040.yaml
rename to tests/components/atm90e32/test.rp2040-ard.yaml
diff --git a/tests/components/b_parasite/test.esp32-c3.yaml b/tests/components/b_parasite/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/b_parasite/test.esp32-c3.yaml
rename to tests/components/b_parasite/test.esp32-ard.yaml
diff --git a/tests/components/b_parasite/test.esp32.yaml b/tests/components/b_parasite/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/b_parasite/test.esp32.yaml
rename to tests/components/b_parasite/test.esp32-c3-ard.yaml
diff --git a/tests/components/ballu/test.esp32.yaml b/tests/components/ballu/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ballu/test.esp32.yaml
rename to tests/components/ballu/test.esp32-ard.yaml
diff --git a/tests/components/ballu/test.esp8266.yaml b/tests/components/ballu/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ballu/test.esp8266.yaml
rename to tests/components/ballu/test.esp8266-ard.yaml
diff --git a/tests/components/bang_bang/test.esp32-c3.yaml b/tests/components/bang_bang/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/bang_bang/test.esp32-c3.yaml
rename to tests/components/bang_bang/test.esp32-ard.yaml
diff --git a/tests/components/bang_bang/test.esp32.yaml b/tests/components/bang_bang/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/bang_bang/test.esp32.yaml
rename to tests/components/bang_bang/test.esp32-c3-ard.yaml
diff --git a/tests/components/bang_bang/test.esp8266.yaml b/tests/components/bang_bang/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/bang_bang/test.esp8266.yaml
rename to tests/components/bang_bang/test.esp8266-ard.yaml
diff --git a/tests/components/bang_bang/test.rp2040.yaml b/tests/components/bang_bang/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/bang_bang/test.rp2040.yaml
rename to tests/components/bang_bang/test.rp2040-ard.yaml
diff --git a/tests/components/bedjet/test.esp32-c3.yaml b/tests/components/bedjet/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/bedjet/test.esp32-c3.yaml
rename to tests/components/bedjet/test.esp32-ard.yaml
diff --git a/tests/components/bedjet/test.esp32.yaml b/tests/components/bedjet/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/bedjet/test.esp32.yaml
rename to tests/components/bedjet/test.esp32-c3-ard.yaml
diff --git a/tests/components/beken_spi_led_strip/test.bk72xx.yaml b/tests/components/beken_spi_led_strip/test.bk72xx-ard.yaml
similarity index 100%
rename from tests/components/beken_spi_led_strip/test.bk72xx.yaml
rename to tests/components/beken_spi_led_strip/test.bk72xx-ard.yaml
diff --git a/tests/components/bh1750/test.esp32.yaml b/tests/components/bh1750/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/bh1750/test.esp32.yaml
rename to tests/components/bh1750/test.esp32-ard.yaml
diff --git a/tests/components/bh1750/test.esp32-c3.yaml b/tests/components/bh1750/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/bh1750/test.esp32-c3.yaml
rename to tests/components/bh1750/test.esp32-c3-ard.yaml
diff --git a/tests/components/bh1750/test.esp8266.yaml b/tests/components/bh1750/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/bh1750/test.esp8266.yaml
rename to tests/components/bh1750/test.esp8266-ard.yaml
diff --git a/tests/components/bh1750/test.rp2040.yaml b/tests/components/bh1750/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/bh1750/test.rp2040.yaml
rename to tests/components/bh1750/test.rp2040-ard.yaml
diff --git a/tests/components/binary_sensor_map/test.esp32-c3.yaml b/tests/components/binary_sensor_map/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/binary_sensor_map/test.esp32-c3.yaml
rename to tests/components/binary_sensor_map/test.esp32-ard.yaml
diff --git a/tests/components/binary_sensor_map/test.esp32.yaml b/tests/components/binary_sensor_map/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/binary_sensor_map/test.esp32.yaml
rename to tests/components/binary_sensor_map/test.esp32-c3-ard.yaml
diff --git a/tests/components/binary_sensor_map/test.esp8266.yaml b/tests/components/binary_sensor_map/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/binary_sensor_map/test.esp8266.yaml
rename to tests/components/binary_sensor_map/test.esp8266-ard.yaml
diff --git a/tests/components/binary_sensor_map/test.rp2040.yaml b/tests/components/binary_sensor_map/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/binary_sensor_map/test.rp2040.yaml
rename to tests/components/binary_sensor_map/test.rp2040-ard.yaml
diff --git a/tests/components/bl0939/test.esp32.yaml b/tests/components/bl0939/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/bl0939/test.esp32.yaml
rename to tests/components/bl0939/test.esp32-ard.yaml
diff --git a/tests/components/bl0939/test.esp32-c3.yaml b/tests/components/bl0939/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/bl0939/test.esp32-c3.yaml
rename to tests/components/bl0939/test.esp32-c3-ard.yaml
diff --git a/tests/components/bl0939/test.esp8266.yaml b/tests/components/bl0939/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/bl0939/test.esp8266.yaml
rename to tests/components/bl0939/test.esp8266-ard.yaml
diff --git a/tests/components/bl0939/test.rp2040.yaml b/tests/components/bl0939/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/bl0939/test.rp2040.yaml
rename to tests/components/bl0939/test.rp2040-ard.yaml
diff --git a/tests/components/bl0940/test.esp32.yaml b/tests/components/bl0940/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/bl0940/test.esp32.yaml
rename to tests/components/bl0940/test.esp32-ard.yaml
diff --git a/tests/components/bl0940/test.esp32-c3.yaml b/tests/components/bl0940/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/bl0940/test.esp32-c3.yaml
rename to tests/components/bl0940/test.esp32-c3-ard.yaml
diff --git a/tests/components/bl0940/test.esp8266.yaml b/tests/components/bl0940/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/bl0940/test.esp8266.yaml
rename to tests/components/bl0940/test.esp8266-ard.yaml
diff --git a/tests/components/bl0940/test.rp2040.yaml b/tests/components/bl0940/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/bl0940/test.rp2040.yaml
rename to tests/components/bl0940/test.rp2040-ard.yaml
diff --git a/tests/components/bl0942/test.esp32.yaml b/tests/components/bl0942/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/bl0942/test.esp32.yaml
rename to tests/components/bl0942/test.esp32-ard.yaml
diff --git a/tests/components/bl0942/test.esp32-c3.yaml b/tests/components/bl0942/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/bl0942/test.esp32-c3.yaml
rename to tests/components/bl0942/test.esp32-c3-ard.yaml
diff --git a/tests/components/bl0942/test.esp8266.yaml b/tests/components/bl0942/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/bl0942/test.esp8266.yaml
rename to tests/components/bl0942/test.esp8266-ard.yaml
diff --git a/tests/components/bl0942/test.rp2040.yaml b/tests/components/bl0942/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/bl0942/test.rp2040.yaml
rename to tests/components/bl0942/test.rp2040-ard.yaml
diff --git a/tests/components/ble_client/test.esp32-c3.yaml b/tests/components/ble_client/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ble_client/test.esp32-c3.yaml
rename to tests/components/ble_client/test.esp32-ard.yaml
diff --git a/tests/components/ble_client/test.esp32.yaml b/tests/components/ble_client/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ble_client/test.esp32.yaml
rename to tests/components/ble_client/test.esp32-c3-ard.yaml
diff --git a/tests/components/ble_presence/test.esp32-c3.yaml b/tests/components/ble_presence/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ble_presence/test.esp32-c3.yaml
rename to tests/components/ble_presence/test.esp32-ard.yaml
diff --git a/tests/components/ble_presence/test.esp32.yaml b/tests/components/ble_presence/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ble_presence/test.esp32.yaml
rename to tests/components/ble_presence/test.esp32-c3-ard.yaml
diff --git a/tests/components/ble_rssi/test.esp32-c3.yaml b/tests/components/ble_rssi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ble_rssi/test.esp32-c3.yaml
rename to tests/components/ble_rssi/test.esp32-ard.yaml
diff --git a/tests/components/ble_rssi/test.esp32.yaml b/tests/components/ble_rssi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ble_rssi/test.esp32.yaml
rename to tests/components/ble_rssi/test.esp32-c3-ard.yaml
diff --git a/tests/components/ble_scanner/test.esp32-c3.yaml b/tests/components/ble_scanner/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ble_scanner/test.esp32-c3.yaml
rename to tests/components/ble_scanner/test.esp32-ard.yaml
diff --git a/tests/components/ble_scanner/test.esp32.yaml b/tests/components/ble_scanner/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ble_scanner/test.esp32.yaml
rename to tests/components/ble_scanner/test.esp32-c3-ard.yaml
diff --git a/tests/components/bme280_i2c/test.esp32.yaml b/tests/components/bme280_i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/bme280_i2c/test.esp32.yaml
rename to tests/components/bme280_i2c/test.esp32-ard.yaml
diff --git a/tests/components/bme280_i2c/test.esp32-c3.yaml b/tests/components/bme280_i2c/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/bme280_i2c/test.esp32-c3.yaml
rename to tests/components/bme280_i2c/test.esp32-c3-ard.yaml
diff --git a/tests/components/bme280_i2c/test.esp8266.yaml b/tests/components/bme280_i2c/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/bme280_i2c/test.esp8266.yaml
rename to tests/components/bme280_i2c/test.esp8266-ard.yaml
diff --git a/tests/components/bme280_i2c/test.rp2040.yaml b/tests/components/bme280_i2c/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/bme280_i2c/test.rp2040.yaml
rename to tests/components/bme280_i2c/test.rp2040-ard.yaml
diff --git a/tests/components/bme280_spi/test.esp32.yaml b/tests/components/bme280_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/bme280_spi/test.esp32.yaml
rename to tests/components/bme280_spi/test.esp32-ard.yaml
diff --git a/tests/components/bme280_spi/test.esp32-c3.yaml b/tests/components/bme280_spi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/bme280_spi/test.esp32-c3.yaml
rename to tests/components/bme280_spi/test.esp32-c3-ard.yaml
diff --git a/tests/components/bme280_spi/test.esp8266.yaml b/tests/components/bme280_spi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/bme280_spi/test.esp8266.yaml
rename to tests/components/bme280_spi/test.esp8266-ard.yaml
diff --git a/tests/components/bme280_spi/test.rp2040.yaml b/tests/components/bme280_spi/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/bme280_spi/test.rp2040.yaml
rename to tests/components/bme280_spi/test.rp2040-ard.yaml
diff --git a/tests/components/bme680/test.esp32.yaml b/tests/components/bme680/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/bme680/test.esp32.yaml
rename to tests/components/bme680/test.esp32-ard.yaml
diff --git a/tests/components/bme680/test.esp32-c3.yaml b/tests/components/bme680/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/bme680/test.esp32-c3.yaml
rename to tests/components/bme680/test.esp32-c3-ard.yaml
diff --git a/tests/components/bme680/test.esp8266.yaml b/tests/components/bme680/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/bme680/test.esp8266.yaml
rename to tests/components/bme680/test.esp8266-ard.yaml
diff --git a/tests/components/bme680/test.rp2040.yaml b/tests/components/bme680/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/bme680/test.rp2040.yaml
rename to tests/components/bme680/test.rp2040-ard.yaml
diff --git a/tests/components/bme680_bsec/test.esp32.yaml b/tests/components/bme680_bsec/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/bme680_bsec/test.esp32.yaml
rename to tests/components/bme680_bsec/test.esp32-ard.yaml
diff --git a/tests/components/bme680_bsec/test.esp8266.yaml b/tests/components/bme680_bsec/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/bme680_bsec/test.esp8266.yaml
rename to tests/components/bme680_bsec/test.esp8266-ard.yaml
diff --git a/tests/components/bmi160/test.esp32.yaml b/tests/components/bmi160/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/bmi160/test.esp32.yaml
rename to tests/components/bmi160/test.esp32-ard.yaml
diff --git a/tests/components/bmi160/test.esp32-c3.yaml b/tests/components/bmi160/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/bmi160/test.esp32-c3.yaml
rename to tests/components/bmi160/test.esp32-c3-ard.yaml
diff --git a/tests/components/bmi160/test.esp8266.yaml b/tests/components/bmi160/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/bmi160/test.esp8266.yaml
rename to tests/components/bmi160/test.esp8266-ard.yaml
diff --git a/tests/components/bmi160/test.rp2040.yaml b/tests/components/bmi160/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/bmi160/test.rp2040.yaml
rename to tests/components/bmi160/test.rp2040-ard.yaml
diff --git a/tests/components/bmp085/test.esp32.yaml b/tests/components/bmp085/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/bmp085/test.esp32.yaml
rename to tests/components/bmp085/test.esp32-ard.yaml
diff --git a/tests/components/bmp085/test.esp32-c3.yaml b/tests/components/bmp085/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/bmp085/test.esp32-c3.yaml
rename to tests/components/bmp085/test.esp32-c3-ard.yaml
diff --git a/tests/components/bmp085/test.esp8266.yaml b/tests/components/bmp085/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/bmp085/test.esp8266.yaml
rename to tests/components/bmp085/test.esp8266-ard.yaml
diff --git a/tests/components/bmp085/test.rp2040.yaml b/tests/components/bmp085/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/bmp085/test.rp2040.yaml
rename to tests/components/bmp085/test.rp2040-ard.yaml
diff --git a/tests/components/bmp280/test.esp32.yaml b/tests/components/bmp280/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/bmp280/test.esp32.yaml
rename to tests/components/bmp280/test.esp32-ard.yaml
diff --git a/tests/components/bmp280/test.esp32-c3.yaml b/tests/components/bmp280/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/bmp280/test.esp32-c3.yaml
rename to tests/components/bmp280/test.esp32-c3-ard.yaml
diff --git a/tests/components/bmp280/test.esp8266.yaml b/tests/components/bmp280/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/bmp280/test.esp8266.yaml
rename to tests/components/bmp280/test.esp8266-ard.yaml
diff --git a/tests/components/bmp280/test.rp2040.yaml b/tests/components/bmp280/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/bmp280/test.rp2040.yaml
rename to tests/components/bmp280/test.rp2040-ard.yaml
diff --git a/tests/components/bmp3xx_i2c/test.esp32.yaml b/tests/components/bmp3xx_i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/bmp3xx_i2c/test.esp32.yaml
rename to tests/components/bmp3xx_i2c/test.esp32-ard.yaml
diff --git a/tests/components/bmp3xx_i2c/test.esp32-c3.yaml b/tests/components/bmp3xx_i2c/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/bmp3xx_i2c/test.esp32-c3.yaml
rename to tests/components/bmp3xx_i2c/test.esp32-c3-ard.yaml
diff --git a/tests/components/bmp3xx_i2c/test.esp8266.yaml b/tests/components/bmp3xx_i2c/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/bmp3xx_i2c/test.esp8266.yaml
rename to tests/components/bmp3xx_i2c/test.esp8266-ard.yaml
diff --git a/tests/components/bmp3xx_i2c/test.rp2040.yaml b/tests/components/bmp3xx_i2c/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/bmp3xx_i2c/test.rp2040.yaml
rename to tests/components/bmp3xx_i2c/test.rp2040-ard.yaml
diff --git a/tests/components/bmp3xx_spi/test.esp32.yaml b/tests/components/bmp3xx_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/bmp3xx_spi/test.esp32.yaml
rename to tests/components/bmp3xx_spi/test.esp32-ard.yaml
diff --git a/tests/components/bmp3xx_spi/test.esp32-c3.yaml b/tests/components/bmp3xx_spi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/bmp3xx_spi/test.esp32-c3.yaml
rename to tests/components/bmp3xx_spi/test.esp32-c3-ard.yaml
diff --git a/tests/components/bmp3xx_spi/test.esp8266.yaml b/tests/components/bmp3xx_spi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/bmp3xx_spi/test.esp8266.yaml
rename to tests/components/bmp3xx_spi/test.esp8266-ard.yaml
diff --git a/tests/components/bmp3xx_spi/test.rp2040.yaml b/tests/components/bmp3xx_spi/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/bmp3xx_spi/test.rp2040.yaml
rename to tests/components/bmp3xx_spi/test.rp2040-ard.yaml
diff --git a/tests/components/bmp581/test.esp32.yaml b/tests/components/bmp581/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/bmp581/test.esp32.yaml
rename to tests/components/bmp581/test.esp32-ard.yaml
diff --git a/tests/components/bmp581/test.esp32-c3.yaml b/tests/components/bmp581/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/bmp581/test.esp32-c3.yaml
rename to tests/components/bmp581/test.esp32-c3-ard.yaml
diff --git a/tests/components/bmp581/test.esp8266.yaml b/tests/components/bmp581/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/bmp581/test.esp8266.yaml
rename to tests/components/bmp581/test.esp8266-ard.yaml
diff --git a/tests/components/bmp581/test.rp2040.yaml b/tests/components/bmp581/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/bmp581/test.rp2040.yaml
rename to tests/components/bmp581/test.rp2040-ard.yaml
diff --git a/tests/components/bp1658cj/test.esp32.yaml b/tests/components/bp1658cj/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/bp1658cj/test.esp32.yaml
rename to tests/components/bp1658cj/test.esp32-ard.yaml
diff --git a/tests/components/bp1658cj/test.esp32-c3.yaml b/tests/components/bp1658cj/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/bp1658cj/test.esp32-c3.yaml
rename to tests/components/bp1658cj/test.esp32-c3-ard.yaml
diff --git a/tests/components/bp1658cj/test.esp8266.yaml b/tests/components/bp1658cj/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/bp1658cj/test.esp8266.yaml
rename to tests/components/bp1658cj/test.esp8266-ard.yaml
diff --git a/tests/components/bp1658cj/test.rp2040.yaml b/tests/components/bp1658cj/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/bp1658cj/test.rp2040.yaml
rename to tests/components/bp1658cj/test.rp2040-ard.yaml
diff --git a/tests/components/bp5758d/test.esp32.yaml b/tests/components/bp5758d/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/bp5758d/test.esp32.yaml
rename to tests/components/bp5758d/test.esp32-ard.yaml
diff --git a/tests/components/bp5758d/test.esp32-c3.yaml b/tests/components/bp5758d/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/bp5758d/test.esp32-c3.yaml
rename to tests/components/bp5758d/test.esp32-c3-ard.yaml
diff --git a/tests/components/bp5758d/test.esp8266.yaml b/tests/components/bp5758d/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/bp5758d/test.esp8266.yaml
rename to tests/components/bp5758d/test.esp8266-ard.yaml
diff --git a/tests/components/bp5758d/test.rp2040.yaml b/tests/components/bp5758d/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/bp5758d/test.rp2040.yaml
rename to tests/components/bp5758d/test.rp2040-ard.yaml
diff --git a/tests/components/button/test.esp32-c3.yaml b/tests/components/button/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/button/test.esp32-c3.yaml
rename to tests/components/button/test.esp32-ard.yaml
diff --git a/tests/components/button/test.esp32.yaml b/tests/components/button/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/button/test.esp32.yaml
rename to tests/components/button/test.esp32-c3-ard.yaml
diff --git a/tests/components/button/test.esp8266.yaml b/tests/components/button/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/button/test.esp8266.yaml
rename to tests/components/button/test.esp8266-ard.yaml
diff --git a/tests/components/button/test.rp2040.yaml b/tests/components/button/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/button/test.rp2040.yaml
rename to tests/components/button/test.rp2040-ard.yaml
diff --git a/tests/components/canbus/test.esp32-c3.yaml b/tests/components/canbus/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/canbus/test.esp32-c3.yaml
rename to tests/components/canbus/test.esp32-ard.yaml
diff --git a/tests/components/canbus/test.esp32.yaml b/tests/components/canbus/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/canbus/test.esp32.yaml
rename to tests/components/canbus/test.esp32-c3-ard.yaml
diff --git a/tests/components/cap1188/test.esp32.yaml b/tests/components/cap1188/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/cap1188/test.esp32.yaml
rename to tests/components/cap1188/test.esp32-ard.yaml
diff --git a/tests/components/cap1188/test.esp32-c3.yaml b/tests/components/cap1188/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/cap1188/test.esp32-c3.yaml
rename to tests/components/cap1188/test.esp32-c3-ard.yaml
diff --git a/tests/components/cap1188/test.esp8266.yaml b/tests/components/cap1188/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/cap1188/test.esp8266.yaml
rename to tests/components/cap1188/test.esp8266-ard.yaml
diff --git a/tests/components/cap1188/test.rp2040.yaml b/tests/components/cap1188/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/cap1188/test.rp2040.yaml
rename to tests/components/cap1188/test.rp2040-ard.yaml
diff --git a/tests/components/captive_portal/test.esp32-c3.yaml b/tests/components/captive_portal/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/captive_portal/test.esp32-c3.yaml
rename to tests/components/captive_portal/test.esp32-ard.yaml
diff --git a/tests/components/captive_portal/test.esp32.yaml b/tests/components/captive_portal/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/captive_portal/test.esp32.yaml
rename to tests/components/captive_portal/test.esp32-c3-ard.yaml
diff --git a/tests/components/captive_portal/test.esp8266.yaml b/tests/components/captive_portal/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/captive_portal/test.esp8266.yaml
rename to tests/components/captive_portal/test.esp8266-ard.yaml
diff --git a/tests/components/ccs811/test.esp32.yaml b/tests/components/ccs811/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ccs811/test.esp32.yaml
rename to tests/components/ccs811/test.esp32-ard.yaml
diff --git a/tests/components/ccs811/test.esp32-c3.yaml b/tests/components/ccs811/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ccs811/test.esp32-c3.yaml
rename to tests/components/ccs811/test.esp32-c3-ard.yaml
diff --git a/tests/components/ccs811/test.esp8266.yaml b/tests/components/ccs811/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ccs811/test.esp8266.yaml
rename to tests/components/ccs811/test.esp8266-ard.yaml
diff --git a/tests/components/ccs811/test.rp2040.yaml b/tests/components/ccs811/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ccs811/test.rp2040.yaml
rename to tests/components/ccs811/test.rp2040-ard.yaml
diff --git a/tests/components/cd74hc4067/test.esp32.yaml b/tests/components/cd74hc4067/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/cd74hc4067/test.esp32.yaml
rename to tests/components/cd74hc4067/test.esp32-ard.yaml
diff --git a/tests/components/cd74hc4067/test.esp32-c3.yaml b/tests/components/cd74hc4067/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/cd74hc4067/test.esp32-c3.yaml
rename to tests/components/cd74hc4067/test.esp32-c3-ard.yaml
diff --git a/tests/components/cd74hc4067/test.esp8266.yaml b/tests/components/cd74hc4067/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/cd74hc4067/test.esp8266.yaml
rename to tests/components/cd74hc4067/test.esp8266-ard.yaml
diff --git a/tests/components/cd74hc4067/test.rp2040.yaml b/tests/components/cd74hc4067/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/cd74hc4067/test.rp2040.yaml
rename to tests/components/cd74hc4067/test.rp2040-ard.yaml
diff --git a/tests/components/climate_ir_lg/test.esp32-c3.yaml b/tests/components/climate_ir_lg/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/climate_ir_lg/test.esp32-c3.yaml
rename to tests/components/climate_ir_lg/test.esp32-ard.yaml
diff --git a/tests/components/climate_ir_lg/test.esp32.yaml b/tests/components/climate_ir_lg/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/climate_ir_lg/test.esp32.yaml
rename to tests/components/climate_ir_lg/test.esp32-c3-ard.yaml
diff --git a/tests/components/climate_ir_lg/test.esp8266.yaml b/tests/components/climate_ir_lg/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/climate_ir_lg/test.esp8266.yaml
rename to tests/components/climate_ir_lg/test.esp8266-ard.yaml
diff --git a/tests/components/color/test.esp32-c3.yaml b/tests/components/color/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/color/test.esp32-c3.yaml
rename to tests/components/color/test.esp32-ard.yaml
diff --git a/tests/components/color/test.esp32.yaml b/tests/components/color/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/color/test.esp32.yaml
rename to tests/components/color/test.esp32-c3-ard.yaml
diff --git a/tests/components/color/test.esp8266.yaml b/tests/components/color/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/color/test.esp8266.yaml
rename to tests/components/color/test.esp8266-ard.yaml
diff --git a/tests/components/color/test.rp2040.yaml b/tests/components/color/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/color/test.rp2040.yaml
rename to tests/components/color/test.rp2040-ard.yaml
diff --git a/tests/components/color_temperature/test.esp32.yaml b/tests/components/color_temperature/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/color_temperature/test.esp32.yaml
rename to tests/components/color_temperature/test.esp32-ard.yaml
diff --git a/tests/components/color_temperature/test.esp32-c3.yaml b/tests/components/color_temperature/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/color_temperature/test.esp32-c3.yaml
rename to tests/components/color_temperature/test.esp32-c3-ard.yaml
diff --git a/tests/components/color_temperature/test.esp8266.yaml b/tests/components/color_temperature/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/color_temperature/test.esp8266.yaml
rename to tests/components/color_temperature/test.esp8266-ard.yaml
diff --git a/tests/components/color_temperature/test.rp2040.yaml b/tests/components/color_temperature/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/color_temperature/test.rp2040.yaml
rename to tests/components/color_temperature/test.rp2040-ard.yaml
diff --git a/tests/components/combination/test.esp32-c3.yaml b/tests/components/combination/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/combination/test.esp32-c3.yaml
rename to tests/components/combination/test.esp32-ard.yaml
diff --git a/tests/components/combination/test.esp32.yaml b/tests/components/combination/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/combination/test.esp32.yaml
rename to tests/components/combination/test.esp32-c3-ard.yaml
diff --git a/tests/components/combination/test.esp8266.yaml b/tests/components/combination/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/combination/test.esp8266.yaml
rename to tests/components/combination/test.esp8266-ard.yaml
diff --git a/tests/components/combination/test.rp2040.yaml b/tests/components/combination/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/combination/test.rp2040.yaml
rename to tests/components/combination/test.rp2040-ard.yaml
diff --git a/tests/components/coolix/test.esp32-c3.yaml b/tests/components/coolix/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/coolix/test.esp32-c3.yaml
rename to tests/components/coolix/test.esp32-ard.yaml
diff --git a/tests/components/coolix/test.esp32.yaml b/tests/components/coolix/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/coolix/test.esp32.yaml
rename to tests/components/coolix/test.esp32-c3-ard.yaml
diff --git a/tests/components/coolix/test.esp8266.yaml b/tests/components/coolix/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/coolix/test.esp8266.yaml
rename to tests/components/coolix/test.esp8266-ard.yaml
diff --git a/tests/components/copy/test.esp32.yaml b/tests/components/copy/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/copy/test.esp32.yaml
rename to tests/components/copy/test.esp32-ard.yaml
diff --git a/tests/components/copy/test.esp32-c3.yaml b/tests/components/copy/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/copy/test.esp32-c3.yaml
rename to tests/components/copy/test.esp32-c3-ard.yaml
diff --git a/tests/components/copy/test.esp8266.yaml b/tests/components/copy/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/copy/test.esp8266.yaml
rename to tests/components/copy/test.esp8266-ard.yaml
diff --git a/tests/components/copy/test.rp2040.yaml b/tests/components/copy/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/copy/test.rp2040.yaml
rename to tests/components/copy/test.rp2040-ard.yaml
diff --git a/tests/components/cs5460a/test.esp32.yaml b/tests/components/cs5460a/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/cs5460a/test.esp32.yaml
rename to tests/components/cs5460a/test.esp32-ard.yaml
diff --git a/tests/components/cs5460a/test.esp32-c3.yaml b/tests/components/cs5460a/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/cs5460a/test.esp32-c3.yaml
rename to tests/components/cs5460a/test.esp32-c3-ard.yaml
diff --git a/tests/components/cs5460a/test.esp8266.yaml b/tests/components/cs5460a/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/cs5460a/test.esp8266.yaml
rename to tests/components/cs5460a/test.esp8266-ard.yaml
diff --git a/tests/components/cs5460a/test.rp2040.yaml b/tests/components/cs5460a/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/cs5460a/test.rp2040.yaml
rename to tests/components/cs5460a/test.rp2040-ard.yaml
diff --git a/tests/components/cse7761/test.esp32.yaml b/tests/components/cse7761/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/cse7761/test.esp32.yaml
rename to tests/components/cse7761/test.esp32-ard.yaml
diff --git a/tests/components/cse7761/test.esp32-c3.yaml b/tests/components/cse7761/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/cse7761/test.esp32-c3.yaml
rename to tests/components/cse7761/test.esp32-c3-ard.yaml
diff --git a/tests/components/cse7761/test.esp8266.yaml b/tests/components/cse7761/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/cse7761/test.esp8266.yaml
rename to tests/components/cse7761/test.esp8266-ard.yaml
diff --git a/tests/components/cse7761/test.rp2040.yaml b/tests/components/cse7761/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/cse7761/test.rp2040.yaml
rename to tests/components/cse7761/test.rp2040-ard.yaml
diff --git a/tests/components/cse7766/test.esp32.yaml b/tests/components/cse7766/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/cse7766/test.esp32.yaml
rename to tests/components/cse7766/test.esp32-ard.yaml
diff --git a/tests/components/cse7766/test.esp32-c3.yaml b/tests/components/cse7766/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/cse7766/test.esp32-c3.yaml
rename to tests/components/cse7766/test.esp32-c3-ard.yaml
diff --git a/tests/components/cse7766/test.esp8266.yaml b/tests/components/cse7766/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/cse7766/test.esp8266.yaml
rename to tests/components/cse7766/test.esp8266-ard.yaml
diff --git a/tests/components/cse7766/test.rp2040.yaml b/tests/components/cse7766/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/cse7766/test.rp2040.yaml
rename to tests/components/cse7766/test.rp2040-ard.yaml
diff --git a/tests/components/cst226/test.esp32-c3.yaml b/tests/components/cst226/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/cst226/test.esp32-c3.yaml
rename to tests/components/cst226/test.esp32-c3-ard.yaml
diff --git a/tests/components/cst816/test.esp32.yaml b/tests/components/cst816/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/cst816/test.esp32.yaml
rename to tests/components/cst816/test.esp32-ard.yaml
diff --git a/tests/components/ct_clamp/test.esp32.yaml b/tests/components/ct_clamp/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ct_clamp/test.esp32.yaml
rename to tests/components/ct_clamp/test.esp32-ard.yaml
diff --git a/tests/components/ct_clamp/test.esp32-c3.yaml b/tests/components/ct_clamp/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ct_clamp/test.esp32-c3.yaml
rename to tests/components/ct_clamp/test.esp32-c3-ard.yaml
diff --git a/tests/components/ct_clamp/test.esp8266.yaml b/tests/components/ct_clamp/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ct_clamp/test.esp8266.yaml
rename to tests/components/ct_clamp/test.esp8266-ard.yaml
diff --git a/tests/components/ct_clamp/test.rp2040.yaml b/tests/components/ct_clamp/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ct_clamp/test.rp2040.yaml
rename to tests/components/ct_clamp/test.rp2040-ard.yaml
diff --git a/tests/components/current_based/test.esp32.yaml b/tests/components/current_based/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/current_based/test.esp32.yaml
rename to tests/components/current_based/test.esp32-ard.yaml
diff --git a/tests/components/current_based/test.esp32-c3.yaml b/tests/components/current_based/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/current_based/test.esp32-c3.yaml
rename to tests/components/current_based/test.esp32-c3-ard.yaml
diff --git a/tests/components/current_based/test.esp8266.yaml b/tests/components/current_based/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/current_based/test.esp8266.yaml
rename to tests/components/current_based/test.esp8266-ard.yaml
diff --git a/tests/components/current_based/test.rp2040.yaml b/tests/components/current_based/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/current_based/test.rp2040.yaml
rename to tests/components/current_based/test.rp2040-ard.yaml
diff --git a/tests/components/cwww/test.esp32.yaml b/tests/components/cwww/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/cwww/test.esp32.yaml
rename to tests/components/cwww/test.esp32-ard.yaml
diff --git a/tests/components/cwww/test.esp32-c3.yaml b/tests/components/cwww/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/cwww/test.esp32-c3.yaml
rename to tests/components/cwww/test.esp32-c3-ard.yaml
diff --git a/tests/components/cwww/test.esp8266.yaml b/tests/components/cwww/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/cwww/test.esp8266.yaml
rename to tests/components/cwww/test.esp8266-ard.yaml
diff --git a/tests/components/cwww/test.rp2040.yaml b/tests/components/cwww/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/cwww/test.rp2040.yaml
rename to tests/components/cwww/test.rp2040-ard.yaml
diff --git a/tests/components/dac7678/test.esp32.yaml b/tests/components/dac7678/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/dac7678/test.esp32.yaml
rename to tests/components/dac7678/test.esp32-ard.yaml
diff --git a/tests/components/dac7678/test.esp32-c3.yaml b/tests/components/dac7678/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/dac7678/test.esp32-c3.yaml
rename to tests/components/dac7678/test.esp32-c3-ard.yaml
diff --git a/tests/components/dac7678/test.esp8266.yaml b/tests/components/dac7678/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/dac7678/test.esp8266.yaml
rename to tests/components/dac7678/test.esp8266-ard.yaml
diff --git a/tests/components/dac7678/test.rp2040.yaml b/tests/components/dac7678/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/dac7678/test.rp2040.yaml
rename to tests/components/dac7678/test.rp2040-ard.yaml
diff --git a/tests/components/daikin/test.esp32.yaml b/tests/components/daikin/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/daikin/test.esp32.yaml
rename to tests/components/daikin/test.esp32-ard.yaml
diff --git a/tests/components/daikin/test.esp8266.yaml b/tests/components/daikin/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/daikin/test.esp8266.yaml
rename to tests/components/daikin/test.esp8266-ard.yaml
diff --git a/tests/components/daikin_arc/test.esp32.yaml b/tests/components/daikin_arc/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/daikin_arc/test.esp32.yaml
rename to tests/components/daikin_arc/test.esp32-ard.yaml
diff --git a/tests/components/daikin_arc/test.esp8266.yaml b/tests/components/daikin_arc/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/daikin_arc/test.esp8266.yaml
rename to tests/components/daikin_arc/test.esp8266-ard.yaml
diff --git a/tests/components/daikin_brc/test.esp32-c3.yaml b/tests/components/daikin_brc/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/daikin_brc/test.esp32-c3.yaml
rename to tests/components/daikin_brc/test.esp32-ard.yaml
diff --git a/tests/components/daikin_brc/test.esp32.yaml b/tests/components/daikin_brc/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/daikin_brc/test.esp32.yaml
rename to tests/components/daikin_brc/test.esp32-c3-ard.yaml
diff --git a/tests/components/daikin_brc/test.esp8266.yaml b/tests/components/daikin_brc/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/daikin_brc/test.esp8266.yaml
rename to tests/components/daikin_brc/test.esp8266-ard.yaml
diff --git a/tests/components/dallas_temp/test.esp32-c3.yaml b/tests/components/dallas_temp/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/dallas_temp/test.esp32-c3.yaml
rename to tests/components/dallas_temp/test.esp32-ard.yaml
diff --git a/tests/components/dallas_temp/test.esp32.yaml b/tests/components/dallas_temp/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/dallas_temp/test.esp32.yaml
rename to tests/components/dallas_temp/test.esp32-c3-ard.yaml
diff --git a/tests/components/dallas_temp/test.esp8266.yaml b/tests/components/dallas_temp/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/dallas_temp/test.esp8266.yaml
rename to tests/components/dallas_temp/test.esp8266-ard.yaml
diff --git a/tests/components/dallas_temp/test.rp2040.yaml b/tests/components/dallas_temp/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/dallas_temp/test.rp2040.yaml
rename to tests/components/dallas_temp/test.rp2040-ard.yaml
diff --git a/tests/components/daly_bms/test.esp32.yaml b/tests/components/daly_bms/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/daly_bms/test.esp32.yaml
rename to tests/components/daly_bms/test.esp32-ard.yaml
diff --git a/tests/components/daly_bms/test.esp32-c3.yaml b/tests/components/daly_bms/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/daly_bms/test.esp32-c3.yaml
rename to tests/components/daly_bms/test.esp32-c3-ard.yaml
diff --git a/tests/components/daly_bms/test.esp8266.yaml b/tests/components/daly_bms/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/daly_bms/test.esp8266.yaml
rename to tests/components/daly_bms/test.esp8266-ard.yaml
diff --git a/tests/components/daly_bms/test.rp2040.yaml b/tests/components/daly_bms/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/daly_bms/test.rp2040.yaml
rename to tests/components/daly_bms/test.rp2040-ard.yaml
diff --git a/tests/components/debug/test.esp32-c3.yaml b/tests/components/debug/test.bk72xx-ard.yaml
similarity index 100%
rename from tests/components/debug/test.esp32-c3.yaml
rename to tests/components/debug/test.bk72xx-ard.yaml
diff --git a/tests/components/debug/test.esp32.yaml b/tests/components/debug/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/debug/test.esp32.yaml
rename to tests/components/debug/test.esp32-ard.yaml
diff --git a/tests/components/debug/test.esp8266.yaml b/tests/components/debug/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/debug/test.esp8266.yaml
rename to tests/components/debug/test.esp32-c3-ard.yaml
diff --git a/tests/components/debug/test.rp2040.yaml b/tests/components/debug/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/debug/test.rp2040.yaml
rename to tests/components/debug/test.esp8266-ard.yaml
diff --git a/tests/components/dht/test.esp32-c3.yaml b/tests/components/debug/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/dht/test.esp32-c3.yaml
rename to tests/components/debug/test.rp2040-ard.yaml
diff --git a/tests/components/deep_sleep/test.esp32-c3.yaml b/tests/components/deep_sleep/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/deep_sleep/test.esp32-c3.yaml
rename to tests/components/deep_sleep/test.esp32-ard.yaml
diff --git a/tests/components/deep_sleep/test.esp32.yaml b/tests/components/deep_sleep/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/deep_sleep/test.esp32.yaml
rename to tests/components/deep_sleep/test.esp32-c3-ard.yaml
diff --git a/tests/components/deep_sleep/test.esp8266.yaml b/tests/components/deep_sleep/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/deep_sleep/test.esp8266.yaml
rename to tests/components/deep_sleep/test.esp8266-ard.yaml
diff --git a/tests/components/delonghi/test.esp32-c3.yaml b/tests/components/delonghi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/delonghi/test.esp32-c3.yaml
rename to tests/components/delonghi/test.esp32-ard.yaml
diff --git a/tests/components/delonghi/test.esp32.yaml b/tests/components/delonghi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/delonghi/test.esp32.yaml
rename to tests/components/delonghi/test.esp32-c3-ard.yaml
diff --git a/tests/components/delonghi/test.esp8266.yaml b/tests/components/delonghi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/delonghi/test.esp8266.yaml
rename to tests/components/delonghi/test.esp8266-ard.yaml
diff --git a/tests/components/dfplayer/test.esp32.yaml b/tests/components/dfplayer/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/dfplayer/test.esp32.yaml
rename to tests/components/dfplayer/test.esp32-ard.yaml
diff --git a/tests/components/dfplayer/test.esp32-c3.yaml b/tests/components/dfplayer/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/dfplayer/test.esp32-c3.yaml
rename to tests/components/dfplayer/test.esp32-c3-ard.yaml
diff --git a/tests/components/dfplayer/test.esp8266.yaml b/tests/components/dfplayer/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/dfplayer/test.esp8266.yaml
rename to tests/components/dfplayer/test.esp8266-ard.yaml
diff --git a/tests/components/dfplayer/test.rp2040.yaml b/tests/components/dfplayer/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/dfplayer/test.rp2040.yaml
rename to tests/components/dfplayer/test.rp2040-ard.yaml
diff --git a/tests/components/dfrobot_sen0395/test.esp32.yaml b/tests/components/dfrobot_sen0395/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/dfrobot_sen0395/test.esp32.yaml
rename to tests/components/dfrobot_sen0395/test.esp32-ard.yaml
diff --git a/tests/components/dfrobot_sen0395/test.esp32-c3.yaml b/tests/components/dfrobot_sen0395/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/dfrobot_sen0395/test.esp32-c3.yaml
rename to tests/components/dfrobot_sen0395/test.esp32-c3-ard.yaml
diff --git a/tests/components/dfrobot_sen0395/test.esp8266.yaml b/tests/components/dfrobot_sen0395/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/dfrobot_sen0395/test.esp8266.yaml
rename to tests/components/dfrobot_sen0395/test.esp8266-ard.yaml
diff --git a/tests/components/dfrobot_sen0395/test.rp2040.yaml b/tests/components/dfrobot_sen0395/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/dfrobot_sen0395/test.rp2040.yaml
rename to tests/components/dfrobot_sen0395/test.rp2040-ard.yaml
diff --git a/tests/components/dht/test.esp32.yaml b/tests/components/dht/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/dht/test.esp32.yaml
rename to tests/components/dht/test.esp32-ard.yaml
diff --git a/tests/components/dht/test.esp8266.yaml b/tests/components/dht/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/dht/test.esp8266.yaml
rename to tests/components/dht/test.esp32-c3-ard.yaml
diff --git a/tests/components/dht/test.rp2040.yaml b/tests/components/dht/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/dht/test.rp2040.yaml
rename to tests/components/dht/test.esp8266-ard.yaml
diff --git a/tests/components/display/test.esp32.yaml b/tests/components/dht/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/display/test.esp32.yaml
rename to tests/components/dht/test.rp2040-ard.yaml
diff --git a/tests/components/dht12/test.esp32.yaml b/tests/components/dht12/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/dht12/test.esp32.yaml
rename to tests/components/dht12/test.esp32-ard.yaml
diff --git a/tests/components/dht12/test.esp32-c3.yaml b/tests/components/dht12/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/dht12/test.esp32-c3.yaml
rename to tests/components/dht12/test.esp32-c3-ard.yaml
diff --git a/tests/components/dht12/test.esp8266.yaml b/tests/components/dht12/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/dht12/test.esp8266.yaml
rename to tests/components/dht12/test.esp8266-ard.yaml
diff --git a/tests/components/dht12/test.rp2040.yaml b/tests/components/dht12/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/dht12/test.rp2040.yaml
rename to tests/components/dht12/test.rp2040-ard.yaml
diff --git a/tests/components/duty_cycle/test.esp32-c3.yaml b/tests/components/display/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/duty_cycle/test.esp32-c3.yaml
rename to tests/components/display/test.esp32-ard.yaml
diff --git a/tests/components/dps310/test.esp32.yaml b/tests/components/dps310/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/dps310/test.esp32.yaml
rename to tests/components/dps310/test.esp32-ard.yaml
diff --git a/tests/components/dps310/test.esp32-c3.yaml b/tests/components/dps310/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/dps310/test.esp32-c3.yaml
rename to tests/components/dps310/test.esp32-c3-ard.yaml
diff --git a/tests/components/dps310/test.esp8266.yaml b/tests/components/dps310/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/dps310/test.esp8266.yaml
rename to tests/components/dps310/test.esp8266-ard.yaml
diff --git a/tests/components/dps310/test.rp2040.yaml b/tests/components/dps310/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/dps310/test.rp2040.yaml
rename to tests/components/dps310/test.rp2040-ard.yaml
diff --git a/tests/components/ds1307/test.esp32.yaml b/tests/components/ds1307/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ds1307/test.esp32.yaml
rename to tests/components/ds1307/test.esp32-ard.yaml
diff --git a/tests/components/ds1307/test.esp32-c3.yaml b/tests/components/ds1307/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ds1307/test.esp32-c3.yaml
rename to tests/components/ds1307/test.esp32-c3-ard.yaml
diff --git a/tests/components/ds1307/test.esp8266.yaml b/tests/components/ds1307/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ds1307/test.esp8266.yaml
rename to tests/components/ds1307/test.esp8266-ard.yaml
diff --git a/tests/components/ds1307/test.rp2040.yaml b/tests/components/ds1307/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ds1307/test.rp2040.yaml
rename to tests/components/ds1307/test.rp2040-ard.yaml
diff --git a/tests/components/dsmr/test.esp32.yaml b/tests/components/dsmr/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/dsmr/test.esp32.yaml
rename to tests/components/dsmr/test.esp32-ard.yaml
diff --git a/tests/components/dsmr/test.esp32-c3.yaml b/tests/components/dsmr/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/dsmr/test.esp32-c3.yaml
rename to tests/components/dsmr/test.esp32-c3-ard.yaml
diff --git a/tests/components/dsmr/test.esp8266.yaml b/tests/components/dsmr/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/dsmr/test.esp8266.yaml
rename to tests/components/dsmr/test.esp8266-ard.yaml
diff --git a/tests/components/dsmr/test.rp2040.yaml b/tests/components/dsmr/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/dsmr/test.rp2040.yaml
rename to tests/components/dsmr/test.rp2040-ard.yaml
diff --git a/tests/components/duty_cycle/test.esp32.yaml b/tests/components/duty_cycle/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/duty_cycle/test.esp32.yaml
rename to tests/components/duty_cycle/test.esp32-ard.yaml
diff --git a/tests/components/duty_cycle/test.esp8266.yaml b/tests/components/duty_cycle/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/duty_cycle/test.esp8266.yaml
rename to tests/components/duty_cycle/test.esp32-c3-ard.yaml
diff --git a/tests/components/duty_cycle/test.rp2040.yaml b/tests/components/duty_cycle/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/duty_cycle/test.rp2040.yaml
rename to tests/components/duty_cycle/test.esp8266-ard.yaml
diff --git a/tests/components/duty_time/test.esp32-c3.yaml b/tests/components/duty_cycle/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/duty_time/test.esp32-c3.yaml
rename to tests/components/duty_cycle/test.rp2040-ard.yaml
diff --git a/tests/components/duty_time/test.esp32.yaml b/tests/components/duty_time/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/duty_time/test.esp32.yaml
rename to tests/components/duty_time/test.esp32-ard.yaml
diff --git a/tests/components/duty_time/test.esp8266.yaml b/tests/components/duty_time/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/duty_time/test.esp8266.yaml
rename to tests/components/duty_time/test.esp32-c3-ard.yaml
diff --git a/tests/components/duty_time/test.rp2040.yaml b/tests/components/duty_time/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/duty_time/test.rp2040.yaml
rename to tests/components/duty_time/test.esp8266-ard.yaml
diff --git a/tests/components/endstop/test.esp32-c3.yaml b/tests/components/duty_time/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/endstop/test.esp32-c3.yaml
rename to tests/components/duty_time/test.rp2040-ard.yaml
diff --git a/tests/components/e131/test.esp32-c3.yaml b/tests/components/e131/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/e131/test.esp32-c3.yaml
rename to tests/components/e131/test.esp32-ard.yaml
diff --git a/tests/components/e131/test.esp32.yaml b/tests/components/e131/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/e131/test.esp32.yaml
rename to tests/components/e131/test.esp32-c3-ard.yaml
diff --git a/tests/components/e131/test.esp8266.yaml b/tests/components/e131/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/e131/test.esp8266.yaml
rename to tests/components/e131/test.esp8266-ard.yaml
diff --git a/tests/components/e131/test.rp2040.yaml b/tests/components/e131/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/e131/test.rp2040.yaml
rename to tests/components/e131/test.rp2040-ard.yaml
diff --git a/tests/components/ee895/test.esp32.yaml b/tests/components/ee895/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ee895/test.esp32.yaml
rename to tests/components/ee895/test.esp32-ard.yaml
diff --git a/tests/components/ee895/test.esp32-c3.yaml b/tests/components/ee895/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ee895/test.esp32-c3.yaml
rename to tests/components/ee895/test.esp32-c3-ard.yaml
diff --git a/tests/components/ee895/test.esp8266.yaml b/tests/components/ee895/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ee895/test.esp8266.yaml
rename to tests/components/ee895/test.esp8266-ard.yaml
diff --git a/tests/components/ee895/test.rp2040.yaml b/tests/components/ee895/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ee895/test.rp2040.yaml
rename to tests/components/ee895/test.rp2040-ard.yaml
diff --git a/tests/components/ektf2232/test.esp32.yaml b/tests/components/ektf2232/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ektf2232/test.esp32.yaml
rename to tests/components/ektf2232/test.esp32-ard.yaml
diff --git a/tests/components/ektf2232/test.esp32-c3.yaml b/tests/components/ektf2232/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ektf2232/test.esp32-c3.yaml
rename to tests/components/ektf2232/test.esp32-c3-ard.yaml
diff --git a/tests/components/ektf2232/test.esp8266.yaml b/tests/components/ektf2232/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ektf2232/test.esp8266.yaml
rename to tests/components/ektf2232/test.esp8266-ard.yaml
diff --git a/tests/components/ektf2232/test.rp2040.yaml b/tests/components/ektf2232/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ektf2232/test.rp2040.yaml
rename to tests/components/ektf2232/test.rp2040-ard.yaml
diff --git a/tests/components/emc2101/test.esp32.yaml b/tests/components/emc2101/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/emc2101/test.esp32.yaml
rename to tests/components/emc2101/test.esp32-ard.yaml
diff --git a/tests/components/emc2101/test.esp32-c3.yaml b/tests/components/emc2101/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/emc2101/test.esp32-c3.yaml
rename to tests/components/emc2101/test.esp32-c3-ard.yaml
diff --git a/tests/components/emc2101/test.esp8266.yaml b/tests/components/emc2101/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/emc2101/test.esp8266.yaml
rename to tests/components/emc2101/test.esp8266-ard.yaml
diff --git a/tests/components/emc2101/test.rp2040.yaml b/tests/components/emc2101/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/emc2101/test.rp2040.yaml
rename to tests/components/emc2101/test.rp2040-ard.yaml
diff --git a/tests/components/emmeti/test.esp32.yaml b/tests/components/emmeti/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/emmeti/test.esp32.yaml
rename to tests/components/emmeti/test.esp32-ard.yaml
diff --git a/tests/components/emmeti/test.esp8266.yaml b/tests/components/emmeti/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/emmeti/test.esp8266.yaml
rename to tests/components/emmeti/test.esp8266-ard.yaml
diff --git a/tests/components/endstop/test.esp32.yaml b/tests/components/endstop/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/endstop/test.esp32.yaml
rename to tests/components/endstop/test.esp32-ard.yaml
diff --git a/tests/components/endstop/test.esp8266.yaml b/tests/components/endstop/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/endstop/test.esp8266.yaml
rename to tests/components/endstop/test.esp32-c3-ard.yaml
diff --git a/tests/components/endstop/test.rp2040.yaml b/tests/components/endstop/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/endstop/test.rp2040.yaml
rename to tests/components/endstop/test.esp8266-ard.yaml
diff --git a/tests/components/esp32_ble/test.esp32-c3.yaml b/tests/components/endstop/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/esp32_ble/test.esp32-c3.yaml
rename to tests/components/endstop/test.rp2040-ard.yaml
diff --git a/tests/components/ens160_i2c/test.esp32.yaml b/tests/components/ens160_i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ens160_i2c/test.esp32.yaml
rename to tests/components/ens160_i2c/test.esp32-ard.yaml
diff --git a/tests/components/ens160_i2c/test.esp32-c3.yaml b/tests/components/ens160_i2c/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ens160_i2c/test.esp32-c3.yaml
rename to tests/components/ens160_i2c/test.esp32-c3-ard.yaml
diff --git a/tests/components/ens160_i2c/test.esp8266.yaml b/tests/components/ens160_i2c/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ens160_i2c/test.esp8266.yaml
rename to tests/components/ens160_i2c/test.esp8266-ard.yaml
diff --git a/tests/components/ens160_i2c/test.rp2040.yaml b/tests/components/ens160_i2c/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ens160_i2c/test.rp2040.yaml
rename to tests/components/ens160_i2c/test.rp2040-ard.yaml
diff --git a/tests/components/ens160_spi/test.esp32.yaml b/tests/components/ens160_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ens160_spi/test.esp32.yaml
rename to tests/components/ens160_spi/test.esp32-ard.yaml
diff --git a/tests/components/ens160_spi/test.esp32-c3.yaml b/tests/components/ens160_spi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ens160_spi/test.esp32-c3.yaml
rename to tests/components/ens160_spi/test.esp32-c3-ard.yaml
diff --git a/tests/components/ens160_spi/test.esp8266.yaml b/tests/components/ens160_spi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ens160_spi/test.esp8266.yaml
rename to tests/components/ens160_spi/test.esp8266-ard.yaml
diff --git a/tests/components/ens160_spi/test.rp2040.yaml b/tests/components/ens160_spi/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ens160_spi/test.rp2040.yaml
rename to tests/components/ens160_spi/test.rp2040-ard.yaml
diff --git a/tests/components/ens210/test.esp32.yaml b/tests/components/ens210/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ens210/test.esp32.yaml
rename to tests/components/ens210/test.esp32-ard.yaml
diff --git a/tests/components/ens210/test.esp32-c3.yaml b/tests/components/ens210/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ens210/test.esp32-c3.yaml
rename to tests/components/ens210/test.esp32-c3-ard.yaml
diff --git a/tests/components/ens210/test.esp8266.yaml b/tests/components/ens210/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ens210/test.esp8266.yaml
rename to tests/components/ens210/test.esp8266-ard.yaml
diff --git a/tests/components/ens210/test.rp2040.yaml b/tests/components/ens210/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ens210/test.rp2040.yaml
rename to tests/components/ens210/test.rp2040-ard.yaml
diff --git a/tests/components/esp32_ble/test.esp32.yaml b/tests/components/esp32_ble/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/esp32_ble/test.esp32.yaml
rename to tests/components/esp32_ble/test.esp32-ard.yaml
diff --git a/tests/components/esp32_ble_beacon/test.esp32-c3.yaml b/tests/components/esp32_ble/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/esp32_ble_beacon/test.esp32-c3.yaml
rename to tests/components/esp32_ble/test.esp32-c3-ard.yaml
diff --git a/tests/components/esp32_ble_beacon/test.esp32.yaml b/tests/components/esp32_ble_beacon/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/esp32_ble_beacon/test.esp32.yaml
rename to tests/components/esp32_ble_beacon/test.esp32-ard.yaml
diff --git a/tests/components/esp32_ble_client/test.esp32-c3.yaml b/tests/components/esp32_ble_beacon/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/esp32_ble_client/test.esp32-c3.yaml
rename to tests/components/esp32_ble_beacon/test.esp32-c3-ard.yaml
diff --git a/tests/components/esp32_ble_client/test.esp32.yaml b/tests/components/esp32_ble_client/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/esp32_ble_client/test.esp32.yaml
rename to tests/components/esp32_ble_client/test.esp32-ard.yaml
diff --git a/tests/components/esp32_ble_server/test.esp32-c3.yaml b/tests/components/esp32_ble_client/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/esp32_ble_server/test.esp32-c3.yaml
rename to tests/components/esp32_ble_client/test.esp32-c3-ard.yaml
diff --git a/tests/components/esp32_ble_server/test.esp32.yaml b/tests/components/esp32_ble_server/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/esp32_ble_server/test.esp32.yaml
rename to tests/components/esp32_ble_server/test.esp32-ard.yaml
diff --git a/tests/components/esp32_ble_tracker/test.esp32-c3.yaml b/tests/components/esp32_ble_server/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/esp32_ble_tracker/test.esp32-c3.yaml
rename to tests/components/esp32_ble_server/test.esp32-c3-ard.yaml
diff --git a/tests/components/esp32_ble_tracker/test.esp32.yaml b/tests/components/esp32_ble_tracker/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/esp32_ble_tracker/test.esp32.yaml
rename to tests/components/esp32_ble_tracker/test.esp32-ard.yaml
diff --git a/tests/components/esp32_camera/test.esp32.yaml b/tests/components/esp32_ble_tracker/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/esp32_camera/test.esp32.yaml
rename to tests/components/esp32_ble_tracker/test.esp32-c3-ard.yaml
diff --git a/tests/components/esp32_camera_web_server/test.esp32.yaml b/tests/components/esp32_camera/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/esp32_camera_web_server/test.esp32.yaml
rename to tests/components/esp32_camera/test.esp32-ard.yaml
diff --git a/tests/components/esp32_dac/test.esp32.yaml b/tests/components/esp32_camera_web_server/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/esp32_dac/test.esp32.yaml
rename to tests/components/esp32_camera_web_server/test.esp32-ard.yaml
diff --git a/tests/components/esp32_can/test.esp32.yaml b/tests/components/esp32_can/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/esp32_can/test.esp32.yaml
rename to tests/components/esp32_can/test.esp32-ard.yaml
diff --git a/tests/components/esp32_can/test.esp32-c3.yaml b/tests/components/esp32_can/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/esp32_can/test.esp32-c3.yaml
rename to tests/components/esp32_can/test.esp32-c3-ard.yaml
diff --git a/tests/components/esp32_hall/test.esp32-idf.yaml b/tests/components/esp32_dac/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/esp32_hall/test.esp32-idf.yaml
rename to tests/components/esp32_dac/test.esp32-ard.yaml
diff --git a/tests/components/esp32_hall/common.yaml b/tests/components/esp32_hall/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/esp32_hall/common.yaml
rename to tests/components/esp32_hall/test.esp32-ard.yaml
diff --git a/tests/components/esp32_hall/test.esp32.yaml b/tests/components/esp32_improv/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/esp32_hall/test.esp32.yaml
rename to tests/components/esp32_improv/test.esp32-ard.yaml
diff --git a/tests/components/esp32_improv/test.esp32-c3.yaml b/tests/components/esp32_improv/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/esp32_improv/test.esp32-c3.yaml
rename to tests/components/esp32_improv/test.esp32-c3-ard.yaml
diff --git a/tests/components/esp32_rmt_led_strip/test.esp32.yaml b/tests/components/esp32_rmt_led_strip/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/esp32_rmt_led_strip/test.esp32.yaml
rename to tests/components/esp32_rmt_led_strip/test.esp32-ard.yaml
diff --git a/tests/components/esp32_rmt_led_strip/test.esp32-c3.yaml b/tests/components/esp32_rmt_led_strip/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/esp32_rmt_led_strip/test.esp32-c3.yaml
rename to tests/components/esp32_rmt_led_strip/test.esp32-c3-ard.yaml
diff --git a/tests/components/esp32_improv/test.esp32.yaml b/tests/components/esp32_touch/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/esp32_improv/test.esp32.yaml
rename to tests/components/esp32_touch/test.esp32-ard.yaml
diff --git a/tests/components/esp32_touch/test.esp32.yaml b/tests/components/esp8266_pwm/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/esp32_touch/test.esp32.yaml
rename to tests/components/esp8266_pwm/test.esp8266-ard.yaml
diff --git a/tests/components/ethernet/lan8720.esp32-idf.yaml b/tests/components/ethernet/common-dp83848.yaml
similarity index 92%
rename from tests/components/ethernet/lan8720.esp32-idf.yaml
rename to tests/components/ethernet/common-dp83848.yaml
index b9ed9cb036..5b6ed3e8d0 100644
--- a/tests/components/ethernet/lan8720.esp32-idf.yaml
+++ b/tests/components/ethernet/common-dp83848.yaml
@@ -1,5 +1,5 @@
 ethernet:
-  type: LAN8720
+  type: DP83848
   mdc_pin: 23
   mdio_pin: 25
   clk_mode: GPIO0_IN
diff --git a/tests/components/ethernet/lan8720.esp32.yaml b/tests/components/ethernet/common-ip101.yaml
similarity index 92%
rename from tests/components/ethernet/lan8720.esp32.yaml
rename to tests/components/ethernet/common-ip101.yaml
index b9ed9cb036..5ca369cce1 100644
--- a/tests/components/ethernet/lan8720.esp32.yaml
+++ b/tests/components/ethernet/common-ip101.yaml
@@ -1,5 +1,5 @@
 ethernet:
-  type: LAN8720
+  type: IP101
   mdc_pin: 23
   mdio_pin: 25
   clk_mode: GPIO0_IN
diff --git a/tests/components/ethernet/common-jl1101.yaml b/tests/components/ethernet/common-jl1101.yaml
new file mode 100644
index 0000000000..639542d807
--- /dev/null
+++ b/tests/components/ethernet/common-jl1101.yaml
@@ -0,0 +1,12 @@
+ethernet:
+  type: JL1101
+  mdc_pin: 23
+  mdio_pin: 25
+  clk_mode: GPIO0_IN
+  phy_addr: 0
+  power_pin: 26
+  manual_ip:
+    static_ip: 192.168.178.56
+    gateway: 192.168.178.1
+    subnet: 255.255.255.0
+  domain: .local
diff --git a/tests/components/ethernet/common-ksz8081.yaml b/tests/components/ethernet/common-ksz8081.yaml
new file mode 100644
index 0000000000..167606a1eb
--- /dev/null
+++ b/tests/components/ethernet/common-ksz8081.yaml
@@ -0,0 +1,12 @@
+ethernet:
+  type: KSZ8081
+  mdc_pin: 23
+  mdio_pin: 25
+  clk_mode: GPIO0_IN
+  phy_addr: 0
+  power_pin: 26
+  manual_ip:
+    static_ip: 192.168.178.56
+    gateway: 192.168.178.1
+    subnet: 255.255.255.0
+  domain: .local
diff --git a/tests/components/ethernet/common-ksz8081rna.yaml b/tests/components/ethernet/common-ksz8081rna.yaml
new file mode 100644
index 0000000000..f506906b1b
--- /dev/null
+++ b/tests/components/ethernet/common-ksz8081rna.yaml
@@ -0,0 +1,12 @@
+ethernet:
+  type: KSZ8081RNA
+  mdc_pin: 23
+  mdio_pin: 25
+  clk_mode: GPIO0_IN
+  phy_addr: 0
+  power_pin: 26
+  manual_ip:
+    static_ip: 192.168.178.56
+    gateway: 192.168.178.1
+    subnet: 255.255.255.0
+  domain: .local
diff --git a/tests/components/ethernet/common.yaml b/tests/components/ethernet/common-lan8720.yaml
similarity index 100%
rename from tests/components/ethernet/common.yaml
rename to tests/components/ethernet/common-lan8720.yaml
diff --git a/tests/components/ethernet/common-rtl8201.yaml b/tests/components/ethernet/common-rtl8201.yaml
new file mode 100644
index 0000000000..43842e7c9f
--- /dev/null
+++ b/tests/components/ethernet/common-rtl8201.yaml
@@ -0,0 +1,12 @@
+ethernet:
+  type: RTL8201
+  mdc_pin: 23
+  mdio_pin: 25
+  clk_mode: GPIO0_IN
+  phy_addr: 0
+  power_pin: 26
+  manual_ip:
+    static_ip: 192.168.178.56
+    gateway: 192.168.178.1
+    subnet: 255.255.255.0
+  domain: .local
diff --git a/tests/components/ethernet/w5500.esp32-idf.yaml b/tests/components/ethernet/common-w5500.yaml
similarity index 57%
rename from tests/components/ethernet/w5500.esp32-idf.yaml
rename to tests/components/ethernet/common-w5500.yaml
index 6fdccb36e3..76661a75c3 100644
--- a/tests/components/ethernet/w5500.esp32-idf.yaml
+++ b/tests/components/ethernet/common-w5500.yaml
@@ -1,11 +1,11 @@
 ethernet:
   type: W5500
-  clk_pin: GPIO19
-  mosi_pin: GPIO21
-  miso_pin: GPIO23
-  cs_pin: GPIO18
-  interrupt_pin: GPIO36
-  reset_pin: GPIO22
+  clk_pin: 19
+  mosi_pin: 21
+  miso_pin: 23
+  cs_pin: 18
+  interrupt_pin: 36
+  reset_pin: 22
   clock_speed: 10Mhz
   manual_ip:
     static_ip: 192.168.178.56
diff --git a/tests/components/ethernet/test-dp83848.esp32-ard.yaml b/tests/components/ethernet/test-dp83848.esp32-ard.yaml
new file mode 100644
index 0000000000..906bfba17c
--- /dev/null
+++ b/tests/components/ethernet/test-dp83848.esp32-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-dp83848.yaml
diff --git a/tests/components/ethernet/test-dp83848.esp32-idf.yaml b/tests/components/ethernet/test-dp83848.esp32-idf.yaml
new file mode 100644
index 0000000000..906bfba17c
--- /dev/null
+++ b/tests/components/ethernet/test-dp83848.esp32-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-dp83848.yaml
diff --git a/tests/components/ethernet/test-ip101.esp32-ard.yaml b/tests/components/ethernet/test-ip101.esp32-ard.yaml
new file mode 100644
index 0000000000..e52329d7ea
--- /dev/null
+++ b/tests/components/ethernet/test-ip101.esp32-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-ip101.yaml
diff --git a/tests/components/ethernet/test-ip101.esp32-idf.yaml b/tests/components/ethernet/test-ip101.esp32-idf.yaml
new file mode 100644
index 0000000000..e52329d7ea
--- /dev/null
+++ b/tests/components/ethernet/test-ip101.esp32-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-ip101.yaml
diff --git a/tests/components/ethernet/test-jl1101.esp32-ard.yaml b/tests/components/ethernet/test-jl1101.esp32-ard.yaml
new file mode 100644
index 0000000000..95d8cd1f21
--- /dev/null
+++ b/tests/components/ethernet/test-jl1101.esp32-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-jl1101.yaml
diff --git a/tests/components/ethernet/test-jl1101.esp32-idf.yaml b/tests/components/ethernet/test-jl1101.esp32-idf.yaml
new file mode 100644
index 0000000000..95d8cd1f21
--- /dev/null
+++ b/tests/components/ethernet/test-jl1101.esp32-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-jl1101.yaml
diff --git a/tests/components/ethernet/test-ksz8081.esp32-ard.yaml b/tests/components/ethernet/test-ksz8081.esp32-ard.yaml
new file mode 100644
index 0000000000..8f3c750c77
--- /dev/null
+++ b/tests/components/ethernet/test-ksz8081.esp32-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-ksz8081.yaml
diff --git a/tests/components/ethernet/test-ksz8081.esp32-idf.yaml b/tests/components/ethernet/test-ksz8081.esp32-idf.yaml
new file mode 100644
index 0000000000..8f3c750c77
--- /dev/null
+++ b/tests/components/ethernet/test-ksz8081.esp32-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-ksz8081.yaml
diff --git a/tests/components/ethernet/test-ksz8081rna.esp32-ard.yaml b/tests/components/ethernet/test-ksz8081rna.esp32-ard.yaml
new file mode 100644
index 0000000000..a48e591996
--- /dev/null
+++ b/tests/components/ethernet/test-ksz8081rna.esp32-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-ksz8081rna.yaml
diff --git a/tests/components/ethernet/test-ksz8081rna.esp32-idf.yaml b/tests/components/ethernet/test-ksz8081rna.esp32-idf.yaml
new file mode 100644
index 0000000000..a48e591996
--- /dev/null
+++ b/tests/components/ethernet/test-ksz8081rna.esp32-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-ksz8081rna.yaml
diff --git a/tests/components/ethernet/test-lan8720.esp32-ard.yaml b/tests/components/ethernet/test-lan8720.esp32-ard.yaml
new file mode 100644
index 0000000000..3df9ac874a
--- /dev/null
+++ b/tests/components/ethernet/test-lan8720.esp32-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-lan8720.yaml
diff --git a/tests/components/ethernet/test-lan8720.esp32-idf.yaml b/tests/components/ethernet/test-lan8720.esp32-idf.yaml
new file mode 100644
index 0000000000..3df9ac874a
--- /dev/null
+++ b/tests/components/ethernet/test-lan8720.esp32-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-lan8720.yaml
diff --git a/tests/components/ethernet/test-rtl8201.esp32-ard.yaml b/tests/components/ethernet/test-rtl8201.esp32-ard.yaml
new file mode 100644
index 0000000000..e69f88dc94
--- /dev/null
+++ b/tests/components/ethernet/test-rtl8201.esp32-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-rtl8201.yaml
diff --git a/tests/components/ethernet/test-rtl8201.esp32-idf.yaml b/tests/components/ethernet/test-rtl8201.esp32-idf.yaml
new file mode 100644
index 0000000000..e69f88dc94
--- /dev/null
+++ b/tests/components/ethernet/test-rtl8201.esp32-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-rtl8201.yaml
diff --git a/tests/components/ethernet/test-w5500.esp32-ard.yaml b/tests/components/ethernet/test-w5500.esp32-ard.yaml
new file mode 100644
index 0000000000..36f1b5365f
--- /dev/null
+++ b/tests/components/ethernet/test-w5500.esp32-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-w5500.yaml
diff --git a/tests/components/ethernet/test-w5500.esp32-idf.yaml b/tests/components/ethernet/test-w5500.esp32-idf.yaml
new file mode 100644
index 0000000000..36f1b5365f
--- /dev/null
+++ b/tests/components/ethernet/test-w5500.esp32-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-w5500.yaml
diff --git a/tests/components/ethernet/w5500.esp32.yaml b/tests/components/ethernet/w5500.esp32.yaml
deleted file mode 100644
index 6fdccb36e3..0000000000
--- a/tests/components/ethernet/w5500.esp32.yaml
+++ /dev/null
@@ -1,14 +0,0 @@
-ethernet:
-  type: W5500
-  clk_pin: GPIO19
-  mosi_pin: GPIO21
-  miso_pin: GPIO23
-  cs_pin: GPIO18
-  interrupt_pin: GPIO36
-  reset_pin: GPIO22
-  clock_speed: 10Mhz
-  manual_ip:
-    static_ip: 192.168.178.56
-    gateway: 192.168.178.1
-    subnet: 255.255.255.0
-  domain: .local
diff --git a/tests/components/esp8266_pwm/test.esp8266.yaml b/tests/components/ethernet_info/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/esp8266_pwm/test.esp8266.yaml
rename to tests/components/ethernet_info/test.esp32-ard.yaml
diff --git a/tests/components/ethernet/test.esp32-idf.yaml b/tests/components/event/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ethernet/test.esp32-idf.yaml
rename to tests/components/event/test.esp32-ard.yaml
diff --git a/tests/components/ethernet/test.esp32.yaml b/tests/components/event/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ethernet/test.esp32.yaml
rename to tests/components/event/test.esp32-c3-ard.yaml
diff --git a/tests/components/ethernet_info/test.esp32.yaml b/tests/components/event/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ethernet_info/test.esp32.yaml
rename to tests/components/event/test.esp8266-ard.yaml
diff --git a/tests/components/event/test.esp32-c3.yaml b/tests/components/event/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/event/test.esp32-c3.yaml
rename to tests/components/event/test.rp2040-ard.yaml
diff --git a/tests/components/event/test.esp32.yaml b/tests/components/exposure_notifications/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/event/test.esp32.yaml
rename to tests/components/exposure_notifications/test.esp32-ard.yaml
diff --git a/tests/components/event/test.esp8266.yaml b/tests/components/exposure_notifications/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/event/test.esp8266.yaml
rename to tests/components/exposure_notifications/test.esp32-c3-ard.yaml
diff --git a/tests/components/event/test.rp2040.yaml b/tests/components/external_components/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/event/test.rp2040.yaml
rename to tests/components/external_components/test.esp32-ard.yaml
diff --git a/tests/components/exposure_notifications/test.esp32-c3.yaml b/tests/components/external_components/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/exposure_notifications/test.esp32-c3.yaml
rename to tests/components/external_components/test.esp32-c3-ard.yaml
diff --git a/tests/components/exposure_notifications/test.esp32.yaml b/tests/components/external_components/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/exposure_notifications/test.esp32.yaml
rename to tests/components/external_components/test.esp8266-ard.yaml
diff --git a/tests/components/external_components/test.esp32-c3.yaml b/tests/components/external_components/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/external_components/test.esp32-c3.yaml
rename to tests/components/external_components/test.rp2040-ard.yaml
diff --git a/tests/components/ezo/test.esp32.yaml b/tests/components/ezo/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ezo/test.esp32.yaml
rename to tests/components/ezo/test.esp32-ard.yaml
diff --git a/tests/components/ezo/test.esp32-c3.yaml b/tests/components/ezo/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ezo/test.esp32-c3.yaml
rename to tests/components/ezo/test.esp32-c3-ard.yaml
diff --git a/tests/components/ezo/test.esp8266.yaml b/tests/components/ezo/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ezo/test.esp8266.yaml
rename to tests/components/ezo/test.esp8266-ard.yaml
diff --git a/tests/components/ezo/test.rp2040.yaml b/tests/components/ezo/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ezo/test.rp2040.yaml
rename to tests/components/ezo/test.rp2040-ard.yaml
diff --git a/tests/components/ezo_pmp/test.esp32.yaml b/tests/components/ezo_pmp/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ezo_pmp/test.esp32.yaml
rename to tests/components/ezo_pmp/test.esp32-ard.yaml
diff --git a/tests/components/ezo_pmp/test.esp32-c3.yaml b/tests/components/ezo_pmp/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ezo_pmp/test.esp32-c3.yaml
rename to tests/components/ezo_pmp/test.esp32-c3-ard.yaml
diff --git a/tests/components/ezo_pmp/test.esp8266.yaml b/tests/components/ezo_pmp/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ezo_pmp/test.esp8266.yaml
rename to tests/components/ezo_pmp/test.esp8266-ard.yaml
diff --git a/tests/components/ezo_pmp/test.rp2040.yaml b/tests/components/ezo_pmp/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ezo_pmp/test.rp2040.yaml
rename to tests/components/ezo_pmp/test.rp2040-ard.yaml
diff --git a/tests/components/external_components/test.esp32.yaml b/tests/components/factory_reset/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/external_components/test.esp32.yaml
rename to tests/components/factory_reset/test.esp32-ard.yaml
diff --git a/tests/components/external_components/test.esp8266.yaml b/tests/components/factory_reset/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/external_components/test.esp8266.yaml
rename to tests/components/factory_reset/test.esp32-c3-ard.yaml
diff --git a/tests/components/external_components/test.rp2040.yaml b/tests/components/factory_reset/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/external_components/test.rp2040.yaml
rename to tests/components/factory_reset/test.esp8266-ard.yaml
diff --git a/tests/components/factory_reset/test.esp32-c3.yaml b/tests/components/factory_reset/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/factory_reset/test.esp32-c3.yaml
rename to tests/components/factory_reset/test.rp2040-ard.yaml
diff --git a/tests/components/factory_reset/test.esp32.yaml b/tests/components/fastled_clockless/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/factory_reset/test.esp32.yaml
rename to tests/components/fastled_clockless/test.esp32-ard.yaml
diff --git a/tests/components/factory_reset/test.esp8266.yaml b/tests/components/fastled_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/factory_reset/test.esp8266.yaml
rename to tests/components/fastled_spi/test.esp32-ard.yaml
diff --git a/tests/components/factory_reset/test.rp2040.yaml b/tests/components/feedback/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/factory_reset/test.rp2040.yaml
rename to tests/components/feedback/test.esp32-ard.yaml
diff --git a/tests/components/fastled_clockless/test.esp32.yaml b/tests/components/feedback/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/fastled_clockless/test.esp32.yaml
rename to tests/components/feedback/test.esp32-c3-ard.yaml
diff --git a/tests/components/fastled_spi/test.esp32.yaml b/tests/components/feedback/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/fastled_spi/test.esp32.yaml
rename to tests/components/feedback/test.esp8266-ard.yaml
diff --git a/tests/components/feedback/test.esp32-c3.yaml b/tests/components/feedback/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/feedback/test.esp32-c3.yaml
rename to tests/components/feedback/test.rp2040-ard.yaml
diff --git a/tests/components/fingerprint_grow/test.esp32.yaml b/tests/components/fingerprint_grow/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/fingerprint_grow/test.esp32.yaml
rename to tests/components/fingerprint_grow/test.esp32-ard.yaml
diff --git a/tests/components/fingerprint_grow/test.esp32-c3.yaml b/tests/components/fingerprint_grow/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/fingerprint_grow/test.esp32-c3.yaml
rename to tests/components/fingerprint_grow/test.esp32-c3-ard.yaml
diff --git a/tests/components/fingerprint_grow/test.esp8266.yaml b/tests/components/fingerprint_grow/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/fingerprint_grow/test.esp8266.yaml
rename to tests/components/fingerprint_grow/test.esp8266-ard.yaml
diff --git a/tests/components/fingerprint_grow/test.rp2040.yaml b/tests/components/fingerprint_grow/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/fingerprint_grow/test.rp2040.yaml
rename to tests/components/fingerprint_grow/test.rp2040-ard.yaml
diff --git a/tests/components/font/test.esp32.yaml b/tests/components/font/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/font/test.esp32.yaml
rename to tests/components/font/test.esp32-ard.yaml
diff --git a/tests/components/font/test.esp32-c3.yaml b/tests/components/font/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/font/test.esp32-c3.yaml
rename to tests/components/font/test.esp32-c3-ard.yaml
diff --git a/tests/components/font/test.esp8266.yaml b/tests/components/font/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/font/test.esp8266.yaml
rename to tests/components/font/test.esp8266-ard.yaml
diff --git a/tests/components/font/test.rp2040.yaml b/tests/components/font/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/font/test.rp2040.yaml
rename to tests/components/font/test.rp2040-ard.yaml
diff --git a/tests/components/fs3000/test.esp32.yaml b/tests/components/fs3000/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/fs3000/test.esp32.yaml
rename to tests/components/fs3000/test.esp32-ard.yaml
diff --git a/tests/components/fs3000/test.esp32-c3.yaml b/tests/components/fs3000/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/fs3000/test.esp32-c3.yaml
rename to tests/components/fs3000/test.esp32-c3-ard.yaml
diff --git a/tests/components/fs3000/test.esp8266.yaml b/tests/components/fs3000/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/fs3000/test.esp8266.yaml
rename to tests/components/fs3000/test.esp8266-ard.yaml
diff --git a/tests/components/fs3000/test.rp2040.yaml b/tests/components/fs3000/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/fs3000/test.rp2040.yaml
rename to tests/components/fs3000/test.rp2040-ard.yaml
diff --git a/tests/components/ft5x06/test.esp32.yaml b/tests/components/ft5x06/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ft5x06/test.esp32.yaml
rename to tests/components/ft5x06/test.esp32-ard.yaml
diff --git a/tests/components/ft5x06/test.esp32-c3.yaml b/tests/components/ft5x06/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ft5x06/test.esp32-c3.yaml
rename to tests/components/ft5x06/test.esp32-c3-ard.yaml
diff --git a/tests/components/ft5x06/test.esp8266.yaml b/tests/components/ft5x06/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ft5x06/test.esp8266.yaml
rename to tests/components/ft5x06/test.esp8266-ard.yaml
diff --git a/tests/components/ft5x06/test.rp2040.yaml b/tests/components/ft5x06/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ft5x06/test.rp2040.yaml
rename to tests/components/ft5x06/test.rp2040-ard.yaml
diff --git a/tests/components/ft63x6/test.esp32.yaml b/tests/components/ft63x6/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ft63x6/test.esp32.yaml
rename to tests/components/ft63x6/test.esp32-ard.yaml
diff --git a/tests/components/ft63x6/test.esp32-c3.yaml b/tests/components/ft63x6/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ft63x6/test.esp32-c3.yaml
rename to tests/components/ft63x6/test.esp32-c3-ard.yaml
diff --git a/tests/components/ft63x6/test.esp8266.yaml b/tests/components/ft63x6/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ft63x6/test.esp8266.yaml
rename to tests/components/ft63x6/test.esp8266-ard.yaml
diff --git a/tests/components/ft63x6/test.rp2040.yaml b/tests/components/ft63x6/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ft63x6/test.rp2040.yaml
rename to tests/components/ft63x6/test.rp2040-ard.yaml
diff --git a/tests/components/fujitsu_general/test.esp32-c3.yaml b/tests/components/fujitsu_general/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/fujitsu_general/test.esp32-c3.yaml
rename to tests/components/fujitsu_general/test.esp32-ard.yaml
diff --git a/tests/components/fujitsu_general/test.esp32.yaml b/tests/components/fujitsu_general/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/fujitsu_general/test.esp32.yaml
rename to tests/components/fujitsu_general/test.esp32-c3-ard.yaml
diff --git a/tests/components/fujitsu_general/test.esp8266.yaml b/tests/components/fujitsu_general/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/fujitsu_general/test.esp8266.yaml
rename to tests/components/fujitsu_general/test.esp8266-ard.yaml
diff --git a/tests/components/gcja5/test.esp32.yaml b/tests/components/gcja5/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/gcja5/test.esp32.yaml
rename to tests/components/gcja5/test.esp32-ard.yaml
diff --git a/tests/components/gcja5/test.esp32-c3.yaml b/tests/components/gcja5/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/gcja5/test.esp32-c3.yaml
rename to tests/components/gcja5/test.esp32-c3-ard.yaml
diff --git a/tests/components/gcja5/test.esp8266.yaml b/tests/components/gcja5/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/gcja5/test.esp8266.yaml
rename to tests/components/gcja5/test.esp8266-ard.yaml
diff --git a/tests/components/gcja5/test.rp2040.yaml b/tests/components/gcja5/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/gcja5/test.rp2040.yaml
rename to tests/components/gcja5/test.rp2040-ard.yaml
diff --git a/tests/components/gdk101/test.esp32.yaml b/tests/components/gdk101/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/gdk101/test.esp32.yaml
rename to tests/components/gdk101/test.esp32-ard.yaml
diff --git a/tests/components/gdk101/test.esp8266.yaml b/tests/components/gdk101/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/gdk101/test.esp8266.yaml
rename to tests/components/gdk101/test.esp8266-ard.yaml
diff --git a/tests/components/gdk101/test.rp2040.yaml b/tests/components/gdk101/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/gdk101/test.rp2040.yaml
rename to tests/components/gdk101/test.rp2040-ard.yaml
diff --git a/tests/components/feedback/test.esp32.yaml b/tests/components/globals/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/feedback/test.esp32.yaml
rename to tests/components/globals/test.esp32-ard.yaml
diff --git a/tests/components/feedback/test.esp8266.yaml b/tests/components/globals/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/feedback/test.esp8266.yaml
rename to tests/components/globals/test.esp32-c3-ard.yaml
diff --git a/tests/components/feedback/test.rp2040.yaml b/tests/components/globals/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/feedback/test.rp2040.yaml
rename to tests/components/globals/test.esp8266-ard.yaml
diff --git a/tests/components/globals/test.esp32-c3.yaml b/tests/components/globals/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/globals/test.esp32-c3.yaml
rename to tests/components/globals/test.rp2040-ard.yaml
diff --git a/tests/components/gp8403/test.esp32.yaml b/tests/components/gp8403/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/gp8403/test.esp32.yaml
rename to tests/components/gp8403/test.esp32-ard.yaml
diff --git a/tests/components/gp8403/test.esp32-c3.yaml b/tests/components/gp8403/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/gp8403/test.esp32-c3.yaml
rename to tests/components/gp8403/test.esp32-c3-ard.yaml
diff --git a/tests/components/gp8403/test.esp8266.yaml b/tests/components/gp8403/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/gp8403/test.esp8266.yaml
rename to tests/components/gp8403/test.esp8266-ard.yaml
diff --git a/tests/components/gp8403/test.rp2040.yaml b/tests/components/gp8403/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/gp8403/test.rp2040.yaml
rename to tests/components/gp8403/test.rp2040-ard.yaml
diff --git a/tests/components/gpio/test.esp32.yaml b/tests/components/gpio/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/gpio/test.esp32.yaml
rename to tests/components/gpio/test.esp32-ard.yaml
diff --git a/tests/components/gpio/test.esp32-c3.yaml b/tests/components/gpio/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/gpio/test.esp32-c3.yaml
rename to tests/components/gpio/test.esp32-c3-ard.yaml
diff --git a/tests/components/gpio/test.esp8266.yaml b/tests/components/gpio/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/gpio/test.esp8266.yaml
rename to tests/components/gpio/test.esp8266-ard.yaml
diff --git a/tests/components/gpio/test.rp2040.yaml b/tests/components/gpio/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/gpio/test.rp2040.yaml
rename to tests/components/gpio/test.rp2040-ard.yaml
diff --git a/tests/components/gps/test.esp32.yaml b/tests/components/gps/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/gps/test.esp32.yaml
rename to tests/components/gps/test.esp32-ard.yaml
diff --git a/tests/components/gps/test.esp32-c3.yaml b/tests/components/gps/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/gps/test.esp32-c3.yaml
rename to tests/components/gps/test.esp32-c3-ard.yaml
diff --git a/tests/components/gps/test.esp8266.yaml b/tests/components/gps/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/gps/test.esp8266.yaml
rename to tests/components/gps/test.esp8266-ard.yaml
diff --git a/tests/components/gps/test.rp2040.yaml b/tests/components/gps/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/gps/test.rp2040.yaml
rename to tests/components/gps/test.rp2040-ard.yaml
diff --git a/tests/components/graph/test.esp32.yaml b/tests/components/graph/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/graph/test.esp32.yaml
rename to tests/components/graph/test.esp32-ard.yaml
diff --git a/tests/components/graph/test.esp32-c3.yaml b/tests/components/graph/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/graph/test.esp32-c3.yaml
rename to tests/components/graph/test.esp32-c3-ard.yaml
diff --git a/tests/components/graph/test.esp8266.yaml b/tests/components/graph/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/graph/test.esp8266.yaml
rename to tests/components/graph/test.esp8266-ard.yaml
diff --git a/tests/components/graph/test.rp2040.yaml b/tests/components/graph/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/graph/test.rp2040.yaml
rename to tests/components/graph/test.rp2040-ard.yaml
diff --git a/tests/components/graphical_display_menu/test.esp32.yaml b/tests/components/graphical_display_menu/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/graphical_display_menu/test.esp32.yaml
rename to tests/components/graphical_display_menu/test.esp32-ard.yaml
diff --git a/tests/components/graphical_display_menu/test.esp32-c3.yaml b/tests/components/graphical_display_menu/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/graphical_display_menu/test.esp32-c3.yaml
rename to tests/components/graphical_display_menu/test.esp32-c3-ard.yaml
diff --git a/tests/components/graphical_display_menu/test.esp8266.yaml b/tests/components/graphical_display_menu/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/graphical_display_menu/test.esp8266.yaml
rename to tests/components/graphical_display_menu/test.esp8266-ard.yaml
diff --git a/tests/components/graphical_display_menu/test.rp2040.yaml b/tests/components/graphical_display_menu/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/graphical_display_menu/test.rp2040.yaml
rename to tests/components/graphical_display_menu/test.rp2040-ard.yaml
diff --git a/tests/components/gree/test.esp32-c3.yaml b/tests/components/gree/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/gree/test.esp32-c3.yaml
rename to tests/components/gree/test.esp32-ard.yaml
diff --git a/tests/components/gree/test.esp32.yaml b/tests/components/gree/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/gree/test.esp32.yaml
rename to tests/components/gree/test.esp32-c3-ard.yaml
diff --git a/tests/components/gree/test.esp8266.yaml b/tests/components/gree/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/gree/test.esp8266.yaml
rename to tests/components/gree/test.esp8266-ard.yaml
diff --git a/tests/components/grove_tb6612fng/test.esp32.yaml b/tests/components/grove_tb6612fng/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/grove_tb6612fng/test.esp32.yaml
rename to tests/components/grove_tb6612fng/test.esp32-ard.yaml
diff --git a/tests/components/grove_tb6612fng/test.esp32-c3.yaml b/tests/components/grove_tb6612fng/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/grove_tb6612fng/test.esp32-c3.yaml
rename to tests/components/grove_tb6612fng/test.esp32-c3-ard.yaml
diff --git a/tests/components/grove_tb6612fng/test.esp8266.yaml b/tests/components/grove_tb6612fng/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/grove_tb6612fng/test.esp8266.yaml
rename to tests/components/grove_tb6612fng/test.esp8266-ard.yaml
diff --git a/tests/components/grove_tb6612fng/test.rp2040.yaml b/tests/components/grove_tb6612fng/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/grove_tb6612fng/test.rp2040.yaml
rename to tests/components/grove_tb6612fng/test.rp2040-ard.yaml
diff --git a/tests/components/growatt_solar/test.esp32.yaml b/tests/components/growatt_solar/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/growatt_solar/test.esp32.yaml
rename to tests/components/growatt_solar/test.esp32-ard.yaml
diff --git a/tests/components/growatt_solar/test.esp32-c3.yaml b/tests/components/growatt_solar/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/growatt_solar/test.esp32-c3.yaml
rename to tests/components/growatt_solar/test.esp32-c3-ard.yaml
diff --git a/tests/components/growatt_solar/test.esp8266.yaml b/tests/components/growatt_solar/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/growatt_solar/test.esp8266.yaml
rename to tests/components/growatt_solar/test.esp8266-ard.yaml
diff --git a/tests/components/growatt_solar/test.rp2040.yaml b/tests/components/growatt_solar/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/growatt_solar/test.rp2040.yaml
rename to tests/components/growatt_solar/test.rp2040-ard.yaml
diff --git a/tests/components/gt911/test.esp32.yaml b/tests/components/gt911/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/gt911/test.esp32.yaml
rename to tests/components/gt911/test.esp32-ard.yaml
diff --git a/tests/components/gt911/test.esp32-c3.yaml b/tests/components/gt911/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/gt911/test.esp32-c3.yaml
rename to tests/components/gt911/test.esp32-c3-ard.yaml
diff --git a/tests/components/gt911/test.esp8266.yaml b/tests/components/gt911/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/gt911/test.esp8266.yaml
rename to tests/components/gt911/test.esp8266-ard.yaml
diff --git a/tests/components/gt911/test.rp2040.yaml b/tests/components/gt911/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/gt911/test.rp2040.yaml
rename to tests/components/gt911/test.rp2040-ard.yaml
diff --git a/tests/components/haier/test.esp32-c3.yaml b/tests/components/haier/common.yaml
similarity index 97%
rename from tests/components/haier/test.esp32-c3.yaml
rename to tests/components/haier/common.yaml
index fed573bd1d..b8a23bac5a 100644
--- a/tests/components/haier/test.esp32-c3.yaml
+++ b/tests/components/haier/common.yaml
@@ -4,13 +4,14 @@ wifi:
 
 uart:
   - id: uart_haier
-    tx_pin: 4
-    rx_pin: 5
+    tx_pin: ${tx_pin}
+    rx_pin: ${rx_pin}
     baud_rate: 9600
 
 climate:
   - platform: haier
     id: haier_ac
+    uart_id: uart_haier
     protocol: hOn
     name: Haier AC
     wifi_signal: true
diff --git a/tests/components/haier/test.esp32-ard.yaml b/tests/components/haier/test.esp32-ard.yaml
new file mode 100644
index 0000000000..f486544afa
--- /dev/null
+++ b/tests/components/haier/test.esp32-ard.yaml
@@ -0,0 +1,5 @@
+substitutions:
+  tx_pin: GPIO17
+  rx_pin: GPIO16
+
+<<: !include common.yaml
diff --git a/tests/components/haier/test.esp32-c3-ard.yaml b/tests/components/haier/test.esp32-c3-ard.yaml
new file mode 100644
index 0000000000..b516342f3b
--- /dev/null
+++ b/tests/components/haier/test.esp32-c3-ard.yaml
@@ -0,0 +1,5 @@
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
+
+<<: !include common.yaml
diff --git a/tests/components/haier/test.esp32-c3-idf.yaml b/tests/components/haier/test.esp32-c3-idf.yaml
index fed573bd1d..b516342f3b 100644
--- a/tests/components/haier/test.esp32-c3-idf.yaml
+++ b/tests/components/haier/test.esp32-c3-idf.yaml
@@ -1,113 +1,5 @@
-wifi:
-  ssid: MySSID
-  password: password1
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
 
-uart:
-  - id: uart_haier
-    tx_pin: 4
-    rx_pin: 5
-    baud_rate: 9600
-
-climate:
-  - platform: haier
-    id: haier_ac
-    protocol: hOn
-    name: Haier AC
-    wifi_signal: true
-    answer_timeout: 200ms
-    beeper: true
-    visual:
-      min_temperature: 16 °C
-      max_temperature: 30 °C
-      temperature_step:
-        target_temperature: 1
-        current_temperature: 0.5
-    supported_modes:
-      - 'OFF'
-      - HEAT_COOL
-      - COOL
-      - HEAT
-      - DRY
-      - FAN_ONLY
-    supported_swing_modes:
-      - 'OFF'
-      - VERTICAL
-      - HORIZONTAL
-      - BOTH
-    supported_presets:
-      - AWAY
-      - BOOST
-      - ECO
-      - SLEEP
-    on_alarm_start:
-      then:
-        - logger.log:
-            level: DEBUG
-            format: "Alarm activated. Code: %d. Message: \"%s\""
-            args: [code, message]
-    on_alarm_end:
-      then:
-        - logger.log:
-            level: DEBUG
-            format: "Alarm deactivated. Code: %d. Message: \"%s\""
-            args: [code, message]
-
-sensor:
-  - platform: haier
-    haier_id: haier_ac
-    outdoor_temperature:
-      name: Haier outdoor temperature
-    humidity:
-      name: Haier Indoor Humidity
-    compressor_current:
-      name: Haier Compressor Current
-    compressor_frequency:
-      name: Haier Compressor Frequency
-    expansion_valve_open_degree:
-      name: Haier Expansion Valve Open Degree
-    indoor_coil_temperature:
-      name: Haier Indoor Coil Temperature
-    outdoor_coil_temperature:
-      name: Haier Outdoor Coil Temperature
-    outdoor_defrost_temperature:
-      name: Haier Outdoor Defrost Temperature
-    outdoor_in_air_temperature:
-      name: Haier Outdoor In Air Temperature
-    outdoor_out_air_temperature:
-      name: Haier Outdoor Out Air Temperature
-    power:
-      name: Haier Power
-
-binary_sensor:
-  - platform: haier
-    haier_id: haier_ac
-    compressor_status:
-      name: Haier Outdoor Compressor Status
-    defrost_status:
-      name: Haier Defrost Status
-    four_way_valve_status:
-      name: Haier Four Way Valve Status
-    indoor_electric_heating_status:
-      name: Haier Indoor Electric Heating Status
-    indoor_fan_status:
-      name: Haier Indoor Fan Status
-    outdoor_fan_status:
-      name: Haier Outdoor Fan Status
-
-button:
-  - platform: haier
-    haier_id: haier_ac
-    self_cleaning:
-      name: Haier start self cleaning
-    steri_cleaning:
-      name: Haier start 56°C steri-cleaning
-
-text_sensor:
-  - platform: haier
-    haier_id: haier_ac
-    appliance_name:
-      name: Haier appliance name
-    cleaning_status:
-      name: Haier cleaning status
-    protocol_version:
-      name: Haier protocol version
+<<: !include common.yaml
diff --git a/tests/components/haier/test.esp32-idf.yaml b/tests/components/haier/test.esp32-idf.yaml
index efff532d25..f486544afa 100644
--- a/tests/components/haier/test.esp32-idf.yaml
+++ b/tests/components/haier/test.esp32-idf.yaml
@@ -1,113 +1,5 @@
-wifi:
-  ssid: MySSID
-  password: password1
+substitutions:
+  tx_pin: GPIO17
+  rx_pin: GPIO16
 
-uart:
-  - id: uart_haier
-    tx_pin: 17
-    rx_pin: 16
-    baud_rate: 9600
-
-climate:
-  - platform: haier
-    id: haier_ac
-    protocol: hOn
-    name: Haier AC
-    wifi_signal: true
-    answer_timeout: 200ms
-    beeper: true
-    visual:
-      min_temperature: 16 °C
-      max_temperature: 30 °C
-      temperature_step:
-        target_temperature: 1
-        current_temperature: 0.5
-    supported_modes:
-      - 'OFF'
-      - HEAT_COOL
-      - COOL
-      - HEAT
-      - DRY
-      - FAN_ONLY
-    supported_swing_modes:
-      - 'OFF'
-      - VERTICAL
-      - HORIZONTAL
-      - BOTH
-    supported_presets:
-      - AWAY
-      - BOOST
-      - ECO
-      - SLEEP
-    on_alarm_start:
-      then:
-        - logger.log:
-            level: DEBUG
-            format: "Alarm activated. Code: %d. Message: \"%s\""
-            args: [code, message]
-    on_alarm_end:
-      then:
-        - logger.log:
-            level: DEBUG
-            format: "Alarm deactivated. Code: %d. Message: \"%s\""
-            args: [code, message]
-
-sensor:
-  - platform: haier
-    haier_id: haier_ac
-    outdoor_temperature:
-      name: Haier outdoor temperature
-    humidity:
-      name: Haier Indoor Humidity
-    compressor_current:
-      name: Haier Compressor Current
-    compressor_frequency:
-      name: Haier Compressor Frequency
-    expansion_valve_open_degree:
-      name: Haier Expansion Valve Open Degree
-    indoor_coil_temperature:
-      name: Haier Indoor Coil Temperature
-    outdoor_coil_temperature:
-      name: Haier Outdoor Coil Temperature
-    outdoor_defrost_temperature:
-      name: Haier Outdoor Defrost Temperature
-    outdoor_in_air_temperature:
-      name: Haier Outdoor In Air Temperature
-    outdoor_out_air_temperature:
-      name: Haier Outdoor Out Air Temperature
-    power:
-      name: Haier Power
-
-binary_sensor:
-  - platform: haier
-    haier_id: haier_ac
-    compressor_status:
-      name: Haier Outdoor Compressor Status
-    defrost_status:
-      name: Haier Defrost Status
-    four_way_valve_status:
-      name: Haier Four Way Valve Status
-    indoor_electric_heating_status:
-      name: Haier Indoor Electric Heating Status
-    indoor_fan_status:
-      name: Haier Indoor Fan Status
-    outdoor_fan_status:
-      name: Haier Outdoor Fan Status
-
-button:
-  - platform: haier
-    haier_id: haier_ac
-    self_cleaning:
-      name: Haier start self cleaning
-    steri_cleaning:
-      name: Haier start 56°C steri-cleaning
-
-text_sensor:
-  - platform: haier
-    haier_id: haier_ac
-    appliance_name:
-      name: Haier appliance name
-    cleaning_status:
-      name: Haier cleaning status
-    protocol_version:
-      name: Haier protocol version
+<<: !include common.yaml
diff --git a/tests/components/haier/test.esp32.yaml b/tests/components/haier/test.esp32.yaml
deleted file mode 100644
index efff532d25..0000000000
--- a/tests/components/haier/test.esp32.yaml
+++ /dev/null
@@ -1,113 +0,0 @@
-wifi:
-  ssid: MySSID
-  password: password1
-
-uart:
-  - id: uart_haier
-    tx_pin: 17
-    rx_pin: 16
-    baud_rate: 9600
-
-climate:
-  - platform: haier
-    id: haier_ac
-    protocol: hOn
-    name: Haier AC
-    wifi_signal: true
-    answer_timeout: 200ms
-    beeper: true
-    visual:
-      min_temperature: 16 °C
-      max_temperature: 30 °C
-      temperature_step:
-        target_temperature: 1
-        current_temperature: 0.5
-    supported_modes:
-      - 'OFF'
-      - HEAT_COOL
-      - COOL
-      - HEAT
-      - DRY
-      - FAN_ONLY
-    supported_swing_modes:
-      - 'OFF'
-      - VERTICAL
-      - HORIZONTAL
-      - BOTH
-    supported_presets:
-      - AWAY
-      - BOOST
-      - ECO
-      - SLEEP
-    on_alarm_start:
-      then:
-        - logger.log:
-            level: DEBUG
-            format: "Alarm activated. Code: %d. Message: \"%s\""
-            args: [code, message]
-    on_alarm_end:
-      then:
-        - logger.log:
-            level: DEBUG
-            format: "Alarm deactivated. Code: %d. Message: \"%s\""
-            args: [code, message]
-
-sensor:
-  - platform: haier
-    haier_id: haier_ac
-    outdoor_temperature:
-      name: Haier outdoor temperature
-    humidity:
-      name: Haier Indoor Humidity
-    compressor_current:
-      name: Haier Compressor Current
-    compressor_frequency:
-      name: Haier Compressor Frequency
-    expansion_valve_open_degree:
-      name: Haier Expansion Valve Open Degree
-    indoor_coil_temperature:
-      name: Haier Indoor Coil Temperature
-    outdoor_coil_temperature:
-      name: Haier Outdoor Coil Temperature
-    outdoor_defrost_temperature:
-      name: Haier Outdoor Defrost Temperature
-    outdoor_in_air_temperature:
-      name: Haier Outdoor In Air Temperature
-    outdoor_out_air_temperature:
-      name: Haier Outdoor Out Air Temperature
-    power:
-      name: Haier Power
-
-binary_sensor:
-  - platform: haier
-    haier_id: haier_ac
-    compressor_status:
-      name: Haier Outdoor Compressor Status
-    defrost_status:
-      name: Haier Defrost Status
-    four_way_valve_status:
-      name: Haier Four Way Valve Status
-    indoor_electric_heating_status:
-      name: Haier Indoor Electric Heating Status
-    indoor_fan_status:
-      name: Haier Indoor Fan Status
-    outdoor_fan_status:
-      name: Haier Outdoor Fan Status
-
-button:
-  - platform: haier
-    haier_id: haier_ac
-    self_cleaning:
-      name: Haier start self cleaning
-    steri_cleaning:
-      name: Haier start 56°C steri-cleaning
-
-text_sensor:
-  - platform: haier
-    haier_id: haier_ac
-    appliance_name:
-      name: Haier appliance name
-    cleaning_status:
-      name: Haier cleaning status
-    protocol_version:
-      name: Haier protocol version
diff --git a/tests/components/haier/test.esp8266-ard.yaml b/tests/components/haier/test.esp8266-ard.yaml
new file mode 100644
index 0000000000..b516342f3b
--- /dev/null
+++ b/tests/components/haier/test.esp8266-ard.yaml
@@ -0,0 +1,5 @@
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
+
+<<: !include common.yaml
diff --git a/tests/components/haier/test.esp8266.yaml b/tests/components/haier/test.esp8266.yaml
deleted file mode 100644
index fed573bd1d..0000000000
--- a/tests/components/haier/test.esp8266.yaml
+++ /dev/null
@@ -1,113 +0,0 @@
-wifi:
-  ssid: MySSID
-  password: password1
-
-uart:
-  - id: uart_haier
-    tx_pin: 4
-    rx_pin: 5
-    baud_rate: 9600
-
-climate:
-  - platform: haier
-    id: haier_ac
-    protocol: hOn
-    name: Haier AC
-    wifi_signal: true
-    answer_timeout: 200ms
-    beeper: true
-    visual:
-      min_temperature: 16 °C
-      max_temperature: 30 °C
-      temperature_step:
-        target_temperature: 1
-        current_temperature: 0.5
-    supported_modes:
-      - 'OFF'
-      - HEAT_COOL
-      - COOL
-      - HEAT
-      - DRY
-      - FAN_ONLY
-    supported_swing_modes:
-      - 'OFF'
-      - VERTICAL
-      - HORIZONTAL
-      - BOTH
-    supported_presets:
-      - AWAY
-      - BOOST
-      - ECO
-      - SLEEP
-    on_alarm_start:
-      then:
-        - logger.log:
-            level: DEBUG
-            format: "Alarm activated. Code: %d. Message: \"%s\""
-            args: [code, message]
-    on_alarm_end:
-      then:
-        - logger.log:
-            level: DEBUG
-            format: "Alarm deactivated. Code: %d. Message: \"%s\""
-            args: [code, message]
-
-sensor:
-  - platform: haier
-    haier_id: haier_ac
-    outdoor_temperature:
-      name: Haier outdoor temperature
-    humidity:
-      name: Haier Indoor Humidity
-    compressor_current:
-      name: Haier Compressor Current
-    compressor_frequency:
-      name: Haier Compressor Frequency
-    expansion_valve_open_degree:
-      name: Haier Expansion Valve Open Degree
-    indoor_coil_temperature:
-      name: Haier Indoor Coil Temperature
-    outdoor_coil_temperature:
-      name: Haier Outdoor Coil Temperature
-    outdoor_defrost_temperature:
-      name: Haier Outdoor Defrost Temperature
-    outdoor_in_air_temperature:
-      name: Haier Outdoor In Air Temperature
-    outdoor_out_air_temperature:
-      name: Haier Outdoor Out Air Temperature
-    power:
-      name: Haier Power
-
-binary_sensor:
-  - platform: haier
-    haier_id: haier_ac
-    compressor_status:
-      name: Haier Outdoor Compressor Status
-    defrost_status:
-      name: Haier Defrost Status
-    four_way_valve_status:
-      name: Haier Four Way Valve Status
-    indoor_electric_heating_status:
-      name: Haier Indoor Electric Heating Status
-    indoor_fan_status:
-      name: Haier Indoor Fan Status
-    outdoor_fan_status:
-      name: Haier Outdoor Fan Status
-
-button:
-  - platform: haier
-    haier_id: haier_ac
-    self_cleaning:
-      name: Haier start self cleaning
-    steri_cleaning:
-      name: Haier start 56°C steri-cleaning
-
-text_sensor:
-  - platform: haier
-    haier_id: haier_ac
-    appliance_name:
-      name: Haier appliance name
-    cleaning_status:
-      name: Haier cleaning status
-    protocol_version:
-      name: Haier protocol version
diff --git a/tests/components/haier/test.rp2040-ard.yaml b/tests/components/haier/test.rp2040-ard.yaml
new file mode 100644
index 0000000000..b516342f3b
--- /dev/null
+++ b/tests/components/haier/test.rp2040-ard.yaml
@@ -0,0 +1,5 @@
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
+
+<<: !include common.yaml
diff --git a/tests/components/haier/test.rp2040.yaml b/tests/components/haier/test.rp2040.yaml
deleted file mode 100644
index fed573bd1d..0000000000
--- a/tests/components/haier/test.rp2040.yaml
+++ /dev/null
@@ -1,113 +0,0 @@
-wifi:
-  ssid: MySSID
-  password: password1
-
-uart:
-  - id: uart_haier
-    tx_pin: 4
-    rx_pin: 5
-    baud_rate: 9600
-
-climate:
-  - platform: haier
-    id: haier_ac
-    protocol: hOn
-    name: Haier AC
-    wifi_signal: true
-    answer_timeout: 200ms
-    beeper: true
-    visual:
-      min_temperature: 16 °C
-      max_temperature: 30 °C
-      temperature_step:
-        target_temperature: 1
-        current_temperature: 0.5
-    supported_modes:
-      - 'OFF'
-      - HEAT_COOL
-      - COOL
-      - HEAT
-      - DRY
-      - FAN_ONLY
-    supported_swing_modes:
-      - 'OFF'
-      - VERTICAL
-      - HORIZONTAL
-      - BOTH
-    supported_presets:
-      - AWAY
-      - BOOST
-      - ECO
-      - SLEEP
-    on_alarm_start:
-      then:
-        - logger.log:
-            level: DEBUG
-            format: "Alarm activated. Code: %d. Message: \"%s\""
-            args: [code, message]
-    on_alarm_end:
-      then:
-        - logger.log:
-            level: DEBUG
-            format: "Alarm deactivated. Code: %d. Message: \"%s\""
-            args: [code, message]
-
-sensor:
-  - platform: haier
-    haier_id: haier_ac
-    outdoor_temperature:
-      name: Haier outdoor temperature
-    humidity:
-      name: Haier Indoor Humidity
-    compressor_current:
-      name: Haier Compressor Current
-    compressor_frequency:
-      name: Haier Compressor Frequency
-    expansion_valve_open_degree:
-      name: Haier Expansion Valve Open Degree
-    indoor_coil_temperature:
-      name: Haier Indoor Coil Temperature
-    outdoor_coil_temperature:
-      name: Haier Outdoor Coil Temperature
-    outdoor_defrost_temperature:
-      name: Haier Outdoor Defrost Temperature
-    outdoor_in_air_temperature:
-      name: Haier Outdoor In Air Temperature
-    outdoor_out_air_temperature:
-      name: Haier Outdoor Out Air Temperature
-    power:
-      name: Haier Power
-
-binary_sensor:
-  - platform: haier
-    haier_id: haier_ac
-    compressor_status:
-      name: Haier Outdoor Compressor Status
-    defrost_status:
-      name: Haier Defrost Status
-    four_way_valve_status:
-      name: Haier Four Way Valve Status
-    indoor_electric_heating_status:
-      name: Haier Indoor Electric Heating Status
-    indoor_fan_status:
-      name: Haier Indoor Fan Status
-    outdoor_fan_status:
-      name: Haier Outdoor Fan Status
-
-button:
-  - platform: haier
-    haier_id: haier_ac
-    self_cleaning:
-      name: Haier start self cleaning
-    steri_cleaning:
-      name: Haier start 56°C steri-cleaning
-
-text_sensor:
-  - platform: haier
-    haier_id: haier_ac
-    appliance_name:
-      name: Haier appliance name
-    cleaning_status:
-      name: Haier cleaning status
-    protocol_version:
-      name: Haier protocol version
diff --git a/tests/components/havells_solar/test.esp32.yaml b/tests/components/havells_solar/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/havells_solar/test.esp32.yaml
rename to tests/components/havells_solar/test.esp32-ard.yaml
diff --git a/tests/components/havells_solar/test.esp32-c3.yaml b/tests/components/havells_solar/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/havells_solar/test.esp32-c3.yaml
rename to tests/components/havells_solar/test.esp32-c3-ard.yaml
diff --git a/tests/components/havells_solar/test.esp8266.yaml b/tests/components/havells_solar/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/havells_solar/test.esp8266.yaml
rename to tests/components/havells_solar/test.esp8266-ard.yaml
diff --git a/tests/components/havells_solar/test.rp2040.yaml b/tests/components/havells_solar/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/havells_solar/test.rp2040.yaml
rename to tests/components/havells_solar/test.rp2040-ard.yaml
diff --git a/tests/components/hbridge/test.esp32.yaml b/tests/components/hbridge/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/hbridge/test.esp32.yaml
rename to tests/components/hbridge/test.esp32-ard.yaml
diff --git a/tests/components/hbridge/test.esp32-c3.yaml b/tests/components/hbridge/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/hbridge/test.esp32-c3.yaml
rename to tests/components/hbridge/test.esp32-c3-ard.yaml
diff --git a/tests/components/hbridge/test.esp8266.yaml b/tests/components/hbridge/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/hbridge/test.esp8266.yaml
rename to tests/components/hbridge/test.esp8266-ard.yaml
diff --git a/tests/components/hbridge/test.rp2040.yaml b/tests/components/hbridge/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/hbridge/test.rp2040.yaml
rename to tests/components/hbridge/test.rp2040-ard.yaml
diff --git a/tests/components/hdc1080/test.esp32.yaml b/tests/components/hdc1080/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/hdc1080/test.esp32.yaml
rename to tests/components/hdc1080/test.esp32-ard.yaml
diff --git a/tests/components/hdc1080/test.esp32-c3.yaml b/tests/components/hdc1080/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/hdc1080/test.esp32-c3.yaml
rename to tests/components/hdc1080/test.esp32-c3-ard.yaml
diff --git a/tests/components/hdc1080/test.esp8266.yaml b/tests/components/hdc1080/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/hdc1080/test.esp8266.yaml
rename to tests/components/hdc1080/test.esp8266-ard.yaml
diff --git a/tests/components/hdc1080/test.rp2040.yaml b/tests/components/hdc1080/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/hdc1080/test.rp2040.yaml
rename to tests/components/hdc1080/test.rp2040-ard.yaml
diff --git a/tests/components/he60r/test.esp32.yaml b/tests/components/he60r/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/he60r/test.esp32.yaml
rename to tests/components/he60r/test.esp32-ard.yaml
diff --git a/tests/components/he60r/test.esp32-c3.yaml b/tests/components/he60r/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/he60r/test.esp32-c3.yaml
rename to tests/components/he60r/test.esp32-c3-ard.yaml
diff --git a/tests/components/he60r/test.esp8266.yaml b/tests/components/he60r/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/he60r/test.esp8266.yaml
rename to tests/components/he60r/test.esp8266-ard.yaml
diff --git a/tests/components/he60r/test.rp2040.yaml b/tests/components/he60r/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/he60r/test.rp2040.yaml
rename to tests/components/he60r/test.rp2040-ard.yaml
diff --git a/tests/components/heatpumpir/test.bk72xx-ard.yaml b/tests/components/heatpumpir/test.bk72xx-ard.yaml
new file mode 100644
index 0000000000..90259f1244
--- /dev/null
+++ b/tests/components/heatpumpir/test.bk72xx-ard.yaml
@@ -0,0 +1,19 @@
+remote_transmitter:
+  pin: 6
+  carrier_duty_percent: 50%
+
+climate:
+  - platform: heatpumpir
+    protocol: daikin
+    horizontal_default: mleft
+    vertical_default: mup
+    name: HeatpumpIR Climate
+    min_temperature: 18
+    max_temperature: 30
+  - platform: heatpumpir
+    protocol: panasonic_altdke
+    horizontal_default: mright
+    vertical_default: mdown
+    name: HeatpumpIR Climate
+    min_temperature: 18
+    max_temperature: 30
diff --git a/tests/components/heatpumpir/test.esp32.yaml b/tests/components/heatpumpir/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/heatpumpir/test.esp32.yaml
rename to tests/components/heatpumpir/test.esp32-ard.yaml
diff --git a/tests/components/heatpumpir/test.esp8266.yaml b/tests/components/heatpumpir/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/heatpumpir/test.esp8266.yaml
rename to tests/components/heatpumpir/test.esp8266-ard.yaml
diff --git a/tests/components/hitachi_ac344/test.esp32-c3.yaml b/tests/components/hitachi_ac344/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/hitachi_ac344/test.esp32-c3.yaml
rename to tests/components/hitachi_ac344/test.esp32-ard.yaml
diff --git a/tests/components/hitachi_ac344/test.esp32.yaml b/tests/components/hitachi_ac344/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/hitachi_ac344/test.esp32.yaml
rename to tests/components/hitachi_ac344/test.esp32-c3-ard.yaml
diff --git a/tests/components/hitachi_ac344/test.esp8266.yaml b/tests/components/hitachi_ac344/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/hitachi_ac344/test.esp8266.yaml
rename to tests/components/hitachi_ac344/test.esp8266-ard.yaml
diff --git a/tests/components/hitachi_ac424/test.esp32-c3.yaml b/tests/components/hitachi_ac424/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/hitachi_ac424/test.esp32-c3.yaml
rename to tests/components/hitachi_ac424/test.esp32-ard.yaml
diff --git a/tests/components/hitachi_ac424/test.esp32.yaml b/tests/components/hitachi_ac424/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/hitachi_ac424/test.esp32.yaml
rename to tests/components/hitachi_ac424/test.esp32-c3-ard.yaml
diff --git a/tests/components/hitachi_ac424/test.esp8266.yaml b/tests/components/hitachi_ac424/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/hitachi_ac424/test.esp8266.yaml
rename to tests/components/hitachi_ac424/test.esp8266-ard.yaml
diff --git a/tests/components/hlw8012/test.esp32.yaml b/tests/components/hlw8012/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/hlw8012/test.esp32.yaml
rename to tests/components/hlw8012/test.esp32-ard.yaml
diff --git a/tests/components/hlw8012/test.esp32-c3.yaml b/tests/components/hlw8012/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/hlw8012/test.esp32-c3.yaml
rename to tests/components/hlw8012/test.esp32-c3-ard.yaml
diff --git a/tests/components/hlw8012/test.esp8266.yaml b/tests/components/hlw8012/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/hlw8012/test.esp8266.yaml
rename to tests/components/hlw8012/test.esp8266-ard.yaml
diff --git a/tests/components/hlw8012/test.rp2040.yaml b/tests/components/hlw8012/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/hlw8012/test.rp2040.yaml
rename to tests/components/hlw8012/test.rp2040-ard.yaml
diff --git a/tests/components/hm3301/test.esp32.yaml b/tests/components/hm3301/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/hm3301/test.esp32.yaml
rename to tests/components/hm3301/test.esp32-ard.yaml
diff --git a/tests/components/hm3301/test.esp32-c3.yaml b/tests/components/hm3301/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/hm3301/test.esp32-c3.yaml
rename to tests/components/hm3301/test.esp32-c3-ard.yaml
diff --git a/tests/components/hm3301/test.esp8266.yaml b/tests/components/hm3301/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/hm3301/test.esp8266.yaml
rename to tests/components/hm3301/test.esp8266-ard.yaml
diff --git a/tests/components/hm3301/test.rp2040.yaml b/tests/components/hm3301/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/hm3301/test.rp2040.yaml
rename to tests/components/hm3301/test.rp2040-ard.yaml
diff --git a/tests/components/hmc5883l/test.esp32.yaml b/tests/components/hmc5883l/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/hmc5883l/test.esp32.yaml
rename to tests/components/hmc5883l/test.esp32-ard.yaml
diff --git a/tests/components/hmc5883l/test.esp32-c3.yaml b/tests/components/hmc5883l/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/hmc5883l/test.esp32-c3.yaml
rename to tests/components/hmc5883l/test.esp32-c3-ard.yaml
diff --git a/tests/components/hmc5883l/test.esp8266.yaml b/tests/components/hmc5883l/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/hmc5883l/test.esp8266.yaml
rename to tests/components/hmc5883l/test.esp8266-ard.yaml
diff --git a/tests/components/hmc5883l/test.rp2040.yaml b/tests/components/hmc5883l/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/hmc5883l/test.rp2040.yaml
rename to tests/components/hmc5883l/test.rp2040-ard.yaml
diff --git a/tests/components/homeassistant/test.bk72xx.yaml b/tests/components/homeassistant/test.bk72xx-ard.yaml
similarity index 100%
rename from tests/components/homeassistant/test.bk72xx.yaml
rename to tests/components/homeassistant/test.bk72xx-ard.yaml
diff --git a/tests/components/homeassistant/test.esp32-c3.yaml b/tests/components/homeassistant/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/homeassistant/test.esp32-c3.yaml
rename to tests/components/homeassistant/test.esp32-ard.yaml
diff --git a/tests/components/homeassistant/test.esp32.yaml b/tests/components/homeassistant/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/homeassistant/test.esp32.yaml
rename to tests/components/homeassistant/test.esp32-c3-ard.yaml
diff --git a/tests/components/homeassistant/test.esp8266.yaml b/tests/components/homeassistant/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/homeassistant/test.esp8266.yaml
rename to tests/components/homeassistant/test.esp8266-ard.yaml
diff --git a/tests/components/homeassistant/test.rp2040.yaml b/tests/components/homeassistant/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/homeassistant/test.rp2040.yaml
rename to tests/components/homeassistant/test.rp2040-ard.yaml
diff --git a/tests/components/honeywell_hih_i2c/test.esp32.yaml b/tests/components/honeywell_hih_i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/honeywell_hih_i2c/test.esp32.yaml
rename to tests/components/honeywell_hih_i2c/test.esp32-ard.yaml
diff --git a/tests/components/honeywell_hih_i2c/test.esp32-c3.yaml b/tests/components/honeywell_hih_i2c/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/honeywell_hih_i2c/test.esp32-c3.yaml
rename to tests/components/honeywell_hih_i2c/test.esp32-c3-ard.yaml
diff --git a/tests/components/honeywell_hih_i2c/test.esp8266.yaml b/tests/components/honeywell_hih_i2c/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/honeywell_hih_i2c/test.esp8266.yaml
rename to tests/components/honeywell_hih_i2c/test.esp8266-ard.yaml
diff --git a/tests/components/honeywell_hih_i2c/test.rp2040.yaml b/tests/components/honeywell_hih_i2c/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/honeywell_hih_i2c/test.rp2040.yaml
rename to tests/components/honeywell_hih_i2c/test.rp2040-ard.yaml
diff --git a/tests/components/honeywellabp/test.esp32.yaml b/tests/components/honeywellabp/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/honeywellabp/test.esp32.yaml
rename to tests/components/honeywellabp/test.esp32-ard.yaml
diff --git a/tests/components/honeywellabp/test.esp32-c3.yaml b/tests/components/honeywellabp/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/honeywellabp/test.esp32-c3.yaml
rename to tests/components/honeywellabp/test.esp32-c3-ard.yaml
diff --git a/tests/components/honeywellabp/test.esp8266.yaml b/tests/components/honeywellabp/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/honeywellabp/test.esp8266.yaml
rename to tests/components/honeywellabp/test.esp8266-ard.yaml
diff --git a/tests/components/honeywellabp/test.rp2040.yaml b/tests/components/honeywellabp/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/honeywellabp/test.rp2040.yaml
rename to tests/components/honeywellabp/test.rp2040-ard.yaml
diff --git a/tests/components/honeywellabp2_i2c/test.esp32.yaml b/tests/components/honeywellabp2_i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/honeywellabp2_i2c/test.esp32.yaml
rename to tests/components/honeywellabp2_i2c/test.esp32-ard.yaml
diff --git a/tests/components/honeywellabp2_i2c/test.esp32-c3.yaml b/tests/components/honeywellabp2_i2c/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/honeywellabp2_i2c/test.esp32-c3.yaml
rename to tests/components/honeywellabp2_i2c/test.esp32-c3-ard.yaml
diff --git a/tests/components/honeywellabp2_i2c/test.esp8266.yaml b/tests/components/honeywellabp2_i2c/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/honeywellabp2_i2c/test.esp8266.yaml
rename to tests/components/honeywellabp2_i2c/test.esp8266-ard.yaml
diff --git a/tests/components/honeywellabp2_i2c/test.rp2040.yaml b/tests/components/honeywellabp2_i2c/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/honeywellabp2_i2c/test.rp2040.yaml
rename to tests/components/honeywellabp2_i2c/test.rp2040-ard.yaml
diff --git a/tests/components/hrxl_maxsonar_wr/test.esp32.yaml b/tests/components/hrxl_maxsonar_wr/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/hrxl_maxsonar_wr/test.esp32.yaml
rename to tests/components/hrxl_maxsonar_wr/test.esp32-ard.yaml
diff --git a/tests/components/hrxl_maxsonar_wr/test.esp32-c3.yaml b/tests/components/hrxl_maxsonar_wr/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/hrxl_maxsonar_wr/test.esp32-c3.yaml
rename to tests/components/hrxl_maxsonar_wr/test.esp32-c3-ard.yaml
diff --git a/tests/components/hrxl_maxsonar_wr/test.esp8266.yaml b/tests/components/hrxl_maxsonar_wr/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/hrxl_maxsonar_wr/test.esp8266.yaml
rename to tests/components/hrxl_maxsonar_wr/test.esp8266-ard.yaml
diff --git a/tests/components/hrxl_maxsonar_wr/test.rp2040.yaml b/tests/components/hrxl_maxsonar_wr/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/hrxl_maxsonar_wr/test.rp2040.yaml
rename to tests/components/hrxl_maxsonar_wr/test.rp2040-ard.yaml
diff --git a/tests/components/hte501/test.esp32.yaml b/tests/components/hte501/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/hte501/test.esp32.yaml
rename to tests/components/hte501/test.esp32-ard.yaml
diff --git a/tests/components/hte501/test.esp32-c3.yaml b/tests/components/hte501/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/hte501/test.esp32-c3.yaml
rename to tests/components/hte501/test.esp32-c3-ard.yaml
diff --git a/tests/components/hte501/test.esp8266.yaml b/tests/components/hte501/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/hte501/test.esp8266.yaml
rename to tests/components/hte501/test.esp8266-ard.yaml
diff --git a/tests/components/hte501/test.rp2040.yaml b/tests/components/hte501/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/hte501/test.rp2040.yaml
rename to tests/components/hte501/test.rp2040-ard.yaml
diff --git a/tests/components/http_request/common.yaml b/tests/components/http_request/common.yaml
index 83b334ca2d..589b7fb4b4 100644
--- a/tests/components/http_request/common.yaml
+++ b/tests/components/http_request/common.yaml
@@ -15,10 +15,10 @@ esphome:
           on_response:
             then:
               - logger.log:
-                  format: "Response status: %d, Duration: %u ms"
+                  format: "Response status: %d, Duration: %lu ms"
                   args:
                     - response->status_code
-                    - response->duration_ms
+                    - (long) response->duration_ms
       - http_request.post:
           url: https://esphome.io
           headers:
diff --git a/tests/components/http_request/test-nossl.esp8266.yaml b/tests/components/http_request/test-nossl.esp8266-ard.yaml
similarity index 100%
rename from tests/components/http_request/test-nossl.esp8266.yaml
rename to tests/components/http_request/test-nossl.esp8266-ard.yaml
diff --git a/tests/components/http_request/test.esp32-c3.yaml b/tests/components/http_request/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/http_request/test.esp32-c3.yaml
rename to tests/components/http_request/test.esp32-ard.yaml
diff --git a/tests/components/http_request/test.esp32.yaml b/tests/components/http_request/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/http_request/test.esp32.yaml
rename to tests/components/http_request/test.esp32-c3-ard.yaml
diff --git a/tests/components/http_request/test.esp8266.yaml b/tests/components/http_request/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/http_request/test.esp8266.yaml
rename to tests/components/http_request/test.esp8266-ard.yaml
diff --git a/tests/components/http_request/test.rp2040.yaml b/tests/components/http_request/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/http_request/test.rp2040.yaml
rename to tests/components/http_request/test.rp2040-ard.yaml
diff --git a/tests/components/htu21d/test.esp32.yaml b/tests/components/htu21d/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/htu21d/test.esp32.yaml
rename to tests/components/htu21d/test.esp32-ard.yaml
diff --git a/tests/components/htu21d/test.esp32-c3.yaml b/tests/components/htu21d/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/htu21d/test.esp32-c3.yaml
rename to tests/components/htu21d/test.esp32-c3-ard.yaml
diff --git a/tests/components/htu21d/test.esp8266.yaml b/tests/components/htu21d/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/htu21d/test.esp8266.yaml
rename to tests/components/htu21d/test.esp8266-ard.yaml
diff --git a/tests/components/htu21d/test.rp2040.yaml b/tests/components/htu21d/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/htu21d/test.rp2040.yaml
rename to tests/components/htu21d/test.rp2040-ard.yaml
diff --git a/tests/components/globals/test.esp32.yaml b/tests/components/htu31d/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/globals/test.esp32.yaml
rename to tests/components/htu31d/test.esp32-ard.yaml
diff --git a/tests/components/globals/test.esp8266.yaml b/tests/components/htu31d/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/globals/test.esp8266.yaml
rename to tests/components/htu31d/test.esp8266-ard.yaml
diff --git a/tests/components/hx711/test.esp32.yaml b/tests/components/hx711/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/hx711/test.esp32.yaml
rename to tests/components/hx711/test.esp32-ard.yaml
diff --git a/tests/components/hx711/test.esp32-c3.yaml b/tests/components/hx711/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/hx711/test.esp32-c3.yaml
rename to tests/components/hx711/test.esp32-c3-ard.yaml
diff --git a/tests/components/hx711/test.esp8266.yaml b/tests/components/hx711/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/hx711/test.esp8266.yaml
rename to tests/components/hx711/test.esp8266-ard.yaml
diff --git a/tests/components/hx711/test.rp2040.yaml b/tests/components/hx711/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/hx711/test.rp2040.yaml
rename to tests/components/hx711/test.rp2040-ard.yaml
diff --git a/tests/components/hydreon_rgxx/test.esp32.yaml b/tests/components/hydreon_rgxx/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/hydreon_rgxx/test.esp32.yaml
rename to tests/components/hydreon_rgxx/test.esp32-ard.yaml
diff --git a/tests/components/hydreon_rgxx/test.esp32-c3.yaml b/tests/components/hydreon_rgxx/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/hydreon_rgxx/test.esp32-c3.yaml
rename to tests/components/hydreon_rgxx/test.esp32-c3-ard.yaml
diff --git a/tests/components/hydreon_rgxx/test.esp8266.yaml b/tests/components/hydreon_rgxx/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/hydreon_rgxx/test.esp8266.yaml
rename to tests/components/hydreon_rgxx/test.esp8266-ard.yaml
diff --git a/tests/components/hydreon_rgxx/test.rp2040.yaml b/tests/components/hydreon_rgxx/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/hydreon_rgxx/test.rp2040.yaml
rename to tests/components/hydreon_rgxx/test.rp2040-ard.yaml
diff --git a/tests/components/hyt271/test.esp32.yaml b/tests/components/hyt271/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/hyt271/test.esp32.yaml
rename to tests/components/hyt271/test.esp32-ard.yaml
diff --git a/tests/components/hyt271/test.esp32-c3.yaml b/tests/components/hyt271/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/hyt271/test.esp32-c3.yaml
rename to tests/components/hyt271/test.esp32-c3-ard.yaml
diff --git a/tests/components/hyt271/test.esp8266.yaml b/tests/components/hyt271/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/hyt271/test.esp8266.yaml
rename to tests/components/hyt271/test.esp8266-ard.yaml
diff --git a/tests/components/hyt271/test.rp2040.yaml b/tests/components/hyt271/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/hyt271/test.rp2040.yaml
rename to tests/components/hyt271/test.rp2040-ard.yaml
diff --git a/tests/components/i2c/test.esp32.yaml b/tests/components/i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/i2c/test.esp32.yaml
rename to tests/components/i2c/test.esp32-ard.yaml
diff --git a/tests/components/i2c/test.esp32-c3.yaml b/tests/components/i2c/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/i2c/test.esp32-c3.yaml
rename to tests/components/i2c/test.esp32-c3-ard.yaml
diff --git a/tests/components/i2c/test.esp8266.yaml b/tests/components/i2c/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/i2c/test.esp8266.yaml
rename to tests/components/i2c/test.esp8266-ard.yaml
diff --git a/tests/components/i2c/test.rp2040.yaml b/tests/components/i2c/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/i2c/test.rp2040.yaml
rename to tests/components/i2c/test.rp2040-ard.yaml
diff --git a/tests/components/i2s_audio/test.esp32.yaml b/tests/components/i2s_audio/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/i2s_audio/test.esp32.yaml
rename to tests/components/i2s_audio/test.esp32-ard.yaml
diff --git a/tests/components/i2s_audio/test.esp32-c3.yaml b/tests/components/i2s_audio/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/i2s_audio/test.esp32-c3.yaml
rename to tests/components/i2s_audio/test.esp32-c3-ard.yaml
diff --git a/tests/components/iaqcore/test.esp32.yaml b/tests/components/iaqcore/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/iaqcore/test.esp32.yaml
rename to tests/components/iaqcore/test.esp32-ard.yaml
diff --git a/tests/components/iaqcore/test.esp32-c3.yaml b/tests/components/iaqcore/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/iaqcore/test.esp32-c3.yaml
rename to tests/components/iaqcore/test.esp32-c3-ard.yaml
diff --git a/tests/components/iaqcore/test.esp8266.yaml b/tests/components/iaqcore/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/iaqcore/test.esp8266.yaml
rename to tests/components/iaqcore/test.esp8266-ard.yaml
diff --git a/tests/components/iaqcore/test.rp2040.yaml b/tests/components/iaqcore/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/iaqcore/test.rp2040.yaml
rename to tests/components/iaqcore/test.rp2040-ard.yaml
diff --git a/tests/components/ili9xxx/test.esp32.yaml b/tests/components/ili9xxx/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ili9xxx/test.esp32.yaml
rename to tests/components/ili9xxx/test.esp32-ard.yaml
diff --git a/tests/components/ili9xxx/test.esp32-c3.yaml b/tests/components/ili9xxx/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ili9xxx/test.esp32-c3.yaml
rename to tests/components/ili9xxx/test.esp32-c3-ard.yaml
diff --git a/tests/components/ili9xxx/test.esp8266.yaml b/tests/components/ili9xxx/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ili9xxx/test.esp8266.yaml
rename to tests/components/ili9xxx/test.esp8266-ard.yaml
diff --git a/tests/components/ili9xxx/test.rp2040.yaml b/tests/components/ili9xxx/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ili9xxx/test.rp2040.yaml
rename to tests/components/ili9xxx/test.rp2040-ard.yaml
diff --git a/tests/components/image/test.esp32.yaml b/tests/components/image/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/image/test.esp32.yaml
rename to tests/components/image/test.esp32-ard.yaml
diff --git a/tests/components/image/test.esp32-c3.yaml b/tests/components/image/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/image/test.esp32-c3.yaml
rename to tests/components/image/test.esp32-c3-ard.yaml
diff --git a/tests/components/image/test.esp8266.yaml b/tests/components/image/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/image/test.esp8266.yaml
rename to tests/components/image/test.esp8266-ard.yaml
diff --git a/tests/components/image/test.rp2040.yaml b/tests/components/image/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/image/test.rp2040.yaml
rename to tests/components/image/test.rp2040-ard.yaml
diff --git a/tests/components/improv_serial/common-uart0.yaml b/tests/components/improv_serial/common-uart0.yaml
new file mode 100644
index 0000000000..7b7730fd46
--- /dev/null
+++ b/tests/components/improv_serial/common-uart0.yaml
@@ -0,0 +1,8 @@
+wifi:
+  ssid: MySSID
+  password: password1
+
+logger:
+  hardware_uart: UART0
+
+improv_serial:
diff --git a/tests/components/improv_serial/common-usb_cdc.yaml b/tests/components/improv_serial/common-usb_cdc.yaml
new file mode 100644
index 0000000000..fc72b6aa7e
--- /dev/null
+++ b/tests/components/improv_serial/common-usb_cdc.yaml
@@ -0,0 +1,8 @@
+wifi:
+  ssid: MySSID
+  password: password1
+
+logger:
+  hardware_uart: USB_CDC
+
+improv_serial:
diff --git a/tests/components/improv_serial/common-usb_serial_jtag.yaml b/tests/components/improv_serial/common-usb_serial_jtag.yaml
new file mode 100644
index 0000000000..0abcc07168
--- /dev/null
+++ b/tests/components/improv_serial/common-usb_serial_jtag.yaml
@@ -0,0 +1,8 @@
+wifi:
+  ssid: MySSID
+  password: password1
+
+logger:
+  hardware_uart: USB_SERIAL_JTAG
+
+improv_serial:
diff --git a/tests/components/improv_serial/test-uart0.esp32-ard.yaml b/tests/components/improv_serial/test-uart0.esp32-ard.yaml
new file mode 100644
index 0000000000..ef8c799241
--- /dev/null
+++ b/tests/components/improv_serial/test-uart0.esp32-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-uart0.yaml
diff --git a/tests/components/improv_serial/test-uart0.esp32-c3-ard.yaml b/tests/components/improv_serial/test-uart0.esp32-c3-ard.yaml
new file mode 100644
index 0000000000..ef8c799241
--- /dev/null
+++ b/tests/components/improv_serial/test-uart0.esp32-c3-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-uart0.yaml
diff --git a/tests/components/improv_serial/test-uart0.esp32-c3-idf.yaml b/tests/components/improv_serial/test-uart0.esp32-c3-idf.yaml
new file mode 100644
index 0000000000..ef8c799241
--- /dev/null
+++ b/tests/components/improv_serial/test-uart0.esp32-c3-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-uart0.yaml
diff --git a/tests/components/improv_serial/test-uart0.esp32-idf.yaml b/tests/components/improv_serial/test-uart0.esp32-idf.yaml
new file mode 100644
index 0000000000..ef8c799241
--- /dev/null
+++ b/tests/components/improv_serial/test-uart0.esp32-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-uart0.yaml
diff --git a/tests/components/improv_serial/test-uart0.esp32-s2-ard.yaml b/tests/components/improv_serial/test-uart0.esp32-s2-ard.yaml
new file mode 100644
index 0000000000..ef8c799241
--- /dev/null
+++ b/tests/components/improv_serial/test-uart0.esp32-s2-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-uart0.yaml
diff --git a/tests/components/improv_serial/test-uart0.esp32-s2-idf.yaml b/tests/components/improv_serial/test-uart0.esp32-s2-idf.yaml
new file mode 100644
index 0000000000..ef8c799241
--- /dev/null
+++ b/tests/components/improv_serial/test-uart0.esp32-s2-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-uart0.yaml
diff --git a/tests/components/improv_serial/test-uart0.esp32-s3-ard.yaml b/tests/components/improv_serial/test-uart0.esp32-s3-ard.yaml
new file mode 100644
index 0000000000..ef8c799241
--- /dev/null
+++ b/tests/components/improv_serial/test-uart0.esp32-s3-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-uart0.yaml
diff --git a/tests/components/improv_serial/test-uart0.esp32-s3-idf.yaml b/tests/components/improv_serial/test-uart0.esp32-s3-idf.yaml
new file mode 100644
index 0000000000..ef8c799241
--- /dev/null
+++ b/tests/components/improv_serial/test-uart0.esp32-s3-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-uart0.yaml
diff --git a/tests/components/improv_serial/test-uart0.esp8266-ard.yaml b/tests/components/improv_serial/test-uart0.esp8266-ard.yaml
new file mode 100644
index 0000000000..ef8c799241
--- /dev/null
+++ b/tests/components/improv_serial/test-uart0.esp8266-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-uart0.yaml
diff --git a/tests/components/improv_serial/test-uart0.rp2040-ard.yaml b/tests/components/improv_serial/test-uart0.rp2040-ard.yaml
new file mode 100644
index 0000000000..ef8c799241
--- /dev/null
+++ b/tests/components/improv_serial/test-uart0.rp2040-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-uart0.yaml
diff --git a/tests/components/improv_serial/test-usb_cdc.esp32-c3-ard.yaml b/tests/components/improv_serial/test-usb_cdc.esp32-c3-ard.yaml
new file mode 100644
index 0000000000..cfdaec9771
--- /dev/null
+++ b/tests/components/improv_serial/test-usb_cdc.esp32-c3-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-usb_cdc.yaml
diff --git a/tests/components/improv_serial/test-usb_cdc.esp32-s2-ard.yaml b/tests/components/improv_serial/test-usb_cdc.esp32-s2-ard.yaml
new file mode 100644
index 0000000000..cfdaec9771
--- /dev/null
+++ b/tests/components/improv_serial/test-usb_cdc.esp32-s2-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-usb_cdc.yaml
diff --git a/tests/components/improv_serial/test-usb_cdc.esp32-s2-idf.yaml b/tests/components/improv_serial/test-usb_cdc.esp32-s2-idf.yaml
new file mode 100644
index 0000000000..cfdaec9771
--- /dev/null
+++ b/tests/components/improv_serial/test-usb_cdc.esp32-s2-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-usb_cdc.yaml
diff --git a/tests/components/improv_serial/test-usb_cdc.esp32-s3-ard.yaml b/tests/components/improv_serial/test-usb_cdc.esp32-s3-ard.yaml
new file mode 100644
index 0000000000..cfdaec9771
--- /dev/null
+++ b/tests/components/improv_serial/test-usb_cdc.esp32-s3-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-usb_cdc.yaml
diff --git a/tests/components/improv_serial/test-usb_cdc.rp2040-ard.yaml b/tests/components/improv_serial/test-usb_cdc.rp2040-ard.yaml
new file mode 100644
index 0000000000..cfdaec9771
--- /dev/null
+++ b/tests/components/improv_serial/test-usb_cdc.rp2040-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-usb_cdc.yaml
diff --git a/tests/components/improv_serial/test-usb_serial_jtag.esp32-c3-idf.yaml b/tests/components/improv_serial/test-usb_serial_jtag.esp32-c3-idf.yaml
new file mode 100644
index 0000000000..46a927ff10
--- /dev/null
+++ b/tests/components/improv_serial/test-usb_serial_jtag.esp32-c3-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-usb_serial_jtag.yaml
diff --git a/tests/components/improv_serial/test-usb_serial_jtag.esp32-s3-idf.yaml b/tests/components/improv_serial/test-usb_serial_jtag.esp32-s3-idf.yaml
new file mode 100644
index 0000000000..46a927ff10
--- /dev/null
+++ b/tests/components/improv_serial/test-usb_serial_jtag.esp32-s3-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-usb_serial_jtag.yaml
diff --git a/tests/components/ina219/test.esp32.yaml b/tests/components/ina219/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ina219/test.esp32.yaml
rename to tests/components/ina219/test.esp32-ard.yaml
diff --git a/tests/components/ina219/test.esp32-c3.yaml b/tests/components/ina219/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ina219/test.esp32-c3.yaml
rename to tests/components/ina219/test.esp32-c3-ard.yaml
diff --git a/tests/components/ina219/test.esp8266.yaml b/tests/components/ina219/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ina219/test.esp8266.yaml
rename to tests/components/ina219/test.esp8266-ard.yaml
diff --git a/tests/components/ina219/test.rp2040.yaml b/tests/components/ina219/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ina219/test.rp2040.yaml
rename to tests/components/ina219/test.rp2040-ard.yaml
diff --git a/tests/components/ina226/test.esp32.yaml b/tests/components/ina226/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ina226/test.esp32.yaml
rename to tests/components/ina226/test.esp32-ard.yaml
diff --git a/tests/components/ina226/test.esp32-c3.yaml b/tests/components/ina226/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ina226/test.esp32-c3.yaml
rename to tests/components/ina226/test.esp32-c3-ard.yaml
diff --git a/tests/components/ina226/test.esp8266.yaml b/tests/components/ina226/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ina226/test.esp8266.yaml
rename to tests/components/ina226/test.esp8266-ard.yaml
diff --git a/tests/components/ina226/test.rp2040.yaml b/tests/components/ina226/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ina226/test.rp2040.yaml
rename to tests/components/ina226/test.rp2040-ard.yaml
diff --git a/tests/components/ina260/test.esp32.yaml b/tests/components/ina260/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ina260/test.esp32.yaml
rename to tests/components/ina260/test.esp32-ard.yaml
diff --git a/tests/components/ina260/test.esp32-c3.yaml b/tests/components/ina260/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ina260/test.esp32-c3.yaml
rename to tests/components/ina260/test.esp32-c3-ard.yaml
diff --git a/tests/components/ina260/test.esp8266.yaml b/tests/components/ina260/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ina260/test.esp8266.yaml
rename to tests/components/ina260/test.esp8266-ard.yaml
diff --git a/tests/components/ina260/test.rp2040.yaml b/tests/components/ina260/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ina260/test.rp2040.yaml
rename to tests/components/ina260/test.rp2040-ard.yaml
diff --git a/tests/components/ina2xx_i2c/test.esp32.yaml b/tests/components/ina2xx_i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ina2xx_i2c/test.esp32.yaml
rename to tests/components/ina2xx_i2c/test.esp32-ard.yaml
diff --git a/tests/components/ina2xx_i2c/test.esp32-c3.yaml b/tests/components/ina2xx_i2c/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ina2xx_i2c/test.esp32-c3.yaml
rename to tests/components/ina2xx_i2c/test.esp32-c3-ard.yaml
diff --git a/tests/components/ina2xx_i2c/test.esp8266.yaml b/tests/components/ina2xx_i2c/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ina2xx_i2c/test.esp8266.yaml
rename to tests/components/ina2xx_i2c/test.esp8266-ard.yaml
diff --git a/tests/components/ina2xx_i2c/test.rp2040.yaml b/tests/components/ina2xx_i2c/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ina2xx_i2c/test.rp2040.yaml
rename to tests/components/ina2xx_i2c/test.rp2040-ard.yaml
diff --git a/tests/components/ina2xx_spi/test.esp32.yaml b/tests/components/ina2xx_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ina2xx_spi/test.esp32.yaml
rename to tests/components/ina2xx_spi/test.esp32-ard.yaml
diff --git a/tests/components/ina2xx_spi/test.esp32-c3.yaml b/tests/components/ina2xx_spi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ina2xx_spi/test.esp32-c3.yaml
rename to tests/components/ina2xx_spi/test.esp32-c3-ard.yaml
diff --git a/tests/components/ina2xx_spi/test.esp8266.yaml b/tests/components/ina2xx_spi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ina2xx_spi/test.esp8266.yaml
rename to tests/components/ina2xx_spi/test.esp8266-ard.yaml
diff --git a/tests/components/ina2xx_spi/test.rp2040.yaml b/tests/components/ina2xx_spi/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ina2xx_spi/test.rp2040.yaml
rename to tests/components/ina2xx_spi/test.rp2040-ard.yaml
diff --git a/tests/components/ina3221/test.esp32.yaml b/tests/components/ina3221/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ina3221/test.esp32.yaml
rename to tests/components/ina3221/test.esp32-ard.yaml
diff --git a/tests/components/ina3221/test.esp32-c3.yaml b/tests/components/ina3221/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ina3221/test.esp32-c3.yaml
rename to tests/components/ina3221/test.esp32-c3-ard.yaml
diff --git a/tests/components/ina3221/test.esp8266.yaml b/tests/components/ina3221/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ina3221/test.esp8266.yaml
rename to tests/components/ina3221/test.esp8266-ard.yaml
diff --git a/tests/components/ina3221/test.rp2040.yaml b/tests/components/ina3221/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ina3221/test.rp2040.yaml
rename to tests/components/ina3221/test.rp2040-ard.yaml
diff --git a/tests/components/globals/test.rp2040.yaml b/tests/components/inkbird_ibsth1_mini/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/globals/test.rp2040.yaml
rename to tests/components/inkbird_ibsth1_mini/test.esp32-ard.yaml
diff --git a/tests/components/htu31d/test.esp32.yaml b/tests/components/inkbird_ibsth1_mini/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/htu31d/test.esp32.yaml
rename to tests/components/inkbird_ibsth1_mini/test.esp32-c3-ard.yaml
diff --git a/tests/components/htu31d/test.esp8266.yaml b/tests/components/inkplate6/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/htu31d/test.esp8266.yaml
rename to tests/components/inkplate6/test.esp32-ard.yaml
diff --git a/tests/components/integration/test.esp32.yaml b/tests/components/integration/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/integration/test.esp32.yaml
rename to tests/components/integration/test.esp32-ard.yaml
diff --git a/tests/components/integration/test.esp32-c3.yaml b/tests/components/integration/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/integration/test.esp32-c3.yaml
rename to tests/components/integration/test.esp32-c3-ard.yaml
diff --git a/tests/components/integration/test.esp32-s2.yaml b/tests/components/integration/test.esp32-s2-ard.yaml
similarity index 100%
rename from tests/components/integration/test.esp32-s2.yaml
rename to tests/components/integration/test.esp32-s2-ard.yaml
diff --git a/tests/components/integration/test.esp32-s3.yaml b/tests/components/integration/test.esp32-s3-ard.yaml
similarity index 100%
rename from tests/components/integration/test.esp32-s3.yaml
rename to tests/components/integration/test.esp32-s3-ard.yaml
diff --git a/tests/components/integration/test.esp8266.yaml b/tests/components/integration/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/integration/test.esp8266.yaml
rename to tests/components/integration/test.esp8266-ard.yaml
diff --git a/tests/components/integration/test.rp2040.yaml b/tests/components/integration/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/integration/test.rp2040.yaml
rename to tests/components/integration/test.rp2040-ard.yaml
diff --git a/tests/components/internal_temperature/test.bk72xx.yaml b/tests/components/internal_temperature/test.bk72xx-ard.yaml
similarity index 100%
rename from tests/components/internal_temperature/test.bk72xx.yaml
rename to tests/components/internal_temperature/test.bk72xx-ard.yaml
diff --git a/tests/components/internal_temperature/test.esp32-c3.yaml b/tests/components/internal_temperature/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/internal_temperature/test.esp32-c3.yaml
rename to tests/components/internal_temperature/test.esp32-ard.yaml
diff --git a/tests/components/internal_temperature/test.esp32-s2.yaml b/tests/components/internal_temperature/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/internal_temperature/test.esp32-s2.yaml
rename to tests/components/internal_temperature/test.esp32-c3-ard.yaml
diff --git a/tests/components/internal_temperature/test.esp32.yaml b/tests/components/internal_temperature/test.esp32-s2-ard.yaml
similarity index 100%
rename from tests/components/internal_temperature/test.esp32.yaml
rename to tests/components/internal_temperature/test.esp32-s2-ard.yaml
diff --git a/tests/components/internal_temperature/test.esp32-s3.yaml b/tests/components/internal_temperature/test.esp32-s3-ard.yaml
similarity index 100%
rename from tests/components/internal_temperature/test.esp32-s3.yaml
rename to tests/components/internal_temperature/test.esp32-s3-ard.yaml
diff --git a/tests/components/internal_temperature/test.rp2040.yaml b/tests/components/internal_temperature/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/internal_temperature/test.rp2040.yaml
rename to tests/components/internal_temperature/test.rp2040-ard.yaml
diff --git a/tests/components/improv_serial/test.esp32-c3-idf.yaml b/tests/components/interval/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/improv_serial/test.esp32-c3-idf.yaml
rename to tests/components/interval/test.esp32-ard.yaml
diff --git a/tests/components/improv_serial/test.esp32-c3.yaml b/tests/components/interval/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/improv_serial/test.esp32-c3.yaml
rename to tests/components/interval/test.esp32-c3-ard.yaml
diff --git a/tests/components/improv_serial/test.esp32-idf.yaml b/tests/components/interval/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/improv_serial/test.esp32-idf.yaml
rename to tests/components/interval/test.esp8266-ard.yaml
diff --git a/tests/components/improv_serial/test.esp32.yaml b/tests/components/interval/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/improv_serial/test.esp32.yaml
rename to tests/components/interval/test.rp2040-ard.yaml
diff --git a/tests/components/jsn_sr04t/test.esp32.yaml b/tests/components/jsn_sr04t/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/jsn_sr04t/test.esp32.yaml
rename to tests/components/jsn_sr04t/test.esp32-ard.yaml
diff --git a/tests/components/jsn_sr04t/test.esp32-c3.yaml b/tests/components/jsn_sr04t/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/jsn_sr04t/test.esp32-c3.yaml
rename to tests/components/jsn_sr04t/test.esp32-c3-ard.yaml
diff --git a/tests/components/jsn_sr04t/test.esp8266.yaml b/tests/components/jsn_sr04t/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/jsn_sr04t/test.esp8266.yaml
rename to tests/components/jsn_sr04t/test.esp8266-ard.yaml
diff --git a/tests/components/jsn_sr04t/test.rp2040.yaml b/tests/components/jsn_sr04t/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/jsn_sr04t/test.rp2040.yaml
rename to tests/components/jsn_sr04t/test.rp2040-ard.yaml
diff --git a/tests/components/kamstrup_kmp/test.esp32.yaml b/tests/components/kamstrup_kmp/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/kamstrup_kmp/test.esp32.yaml
rename to tests/components/kamstrup_kmp/test.esp32-ard.yaml
diff --git a/tests/components/kamstrup_kmp/test.esp8266.yaml b/tests/components/kamstrup_kmp/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/kamstrup_kmp/test.esp8266.yaml
rename to tests/components/kamstrup_kmp/test.esp8266-ard.yaml
diff --git a/tests/components/key_collector/test.esp32.yaml b/tests/components/key_collector/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/key_collector/test.esp32.yaml
rename to tests/components/key_collector/test.esp32-ard.yaml
diff --git a/tests/components/key_collector/test.esp32-c3.yaml b/tests/components/key_collector/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/key_collector/test.esp32-c3.yaml
rename to tests/components/key_collector/test.esp32-c3-ard.yaml
diff --git a/tests/components/key_collector/test.esp8266.yaml b/tests/components/key_collector/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/key_collector/test.esp8266.yaml
rename to tests/components/key_collector/test.esp8266-ard.yaml
diff --git a/tests/components/key_collector/test.rp2040.yaml b/tests/components/key_collector/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/key_collector/test.rp2040.yaml
rename to tests/components/key_collector/test.rp2040-ard.yaml
diff --git a/tests/components/kmeteriso/test.esp32.yaml b/tests/components/kmeteriso/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/kmeteriso/test.esp32.yaml
rename to tests/components/kmeteriso/test.esp32-ard.yaml
diff --git a/tests/components/kmeteriso/test.esp32-c3.yaml b/tests/components/kmeteriso/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/kmeteriso/test.esp32-c3.yaml
rename to tests/components/kmeteriso/test.esp32-c3-ard.yaml
diff --git a/tests/components/kmeteriso/test.esp8266.yaml b/tests/components/kmeteriso/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/kmeteriso/test.esp8266.yaml
rename to tests/components/kmeteriso/test.esp8266-ard.yaml
diff --git a/tests/components/kmeteriso/test.rp2040.yaml b/tests/components/kmeteriso/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/kmeteriso/test.rp2040.yaml
rename to tests/components/kmeteriso/test.rp2040-ard.yaml
diff --git a/tests/components/kuntze/test.esp32.yaml b/tests/components/kuntze/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/kuntze/test.esp32.yaml
rename to tests/components/kuntze/test.esp32-ard.yaml
diff --git a/tests/components/kuntze/test.esp32-c3.yaml b/tests/components/kuntze/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/kuntze/test.esp32-c3.yaml
rename to tests/components/kuntze/test.esp32-c3-ard.yaml
diff --git a/tests/components/kuntze/test.esp8266.yaml b/tests/components/kuntze/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/kuntze/test.esp8266.yaml
rename to tests/components/kuntze/test.esp8266-ard.yaml
diff --git a/tests/components/kuntze/test.rp2040.yaml b/tests/components/kuntze/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/kuntze/test.rp2040.yaml
rename to tests/components/kuntze/test.rp2040-ard.yaml
diff --git a/tests/components/lcd_gpio/test.esp32.yaml b/tests/components/lcd_gpio/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/lcd_gpio/test.esp32.yaml
rename to tests/components/lcd_gpio/test.esp32-ard.yaml
diff --git a/tests/components/lcd_gpio/test.esp32-c3.yaml b/tests/components/lcd_gpio/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/lcd_gpio/test.esp32-c3.yaml
rename to tests/components/lcd_gpio/test.esp32-c3-ard.yaml
diff --git a/tests/components/lcd_gpio/test.esp8266.yaml b/tests/components/lcd_gpio/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/lcd_gpio/test.esp8266.yaml
rename to tests/components/lcd_gpio/test.esp8266-ard.yaml
diff --git a/tests/components/lcd_gpio/test.rp2040.yaml b/tests/components/lcd_gpio/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/lcd_gpio/test.rp2040.yaml
rename to tests/components/lcd_gpio/test.rp2040-ard.yaml
diff --git a/tests/components/lcd_menu/test.esp32.yaml b/tests/components/lcd_menu/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/lcd_menu/test.esp32.yaml
rename to tests/components/lcd_menu/test.esp32-ard.yaml
diff --git a/tests/components/lcd_menu/test.esp32-c3.yaml b/tests/components/lcd_menu/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/lcd_menu/test.esp32-c3.yaml
rename to tests/components/lcd_menu/test.esp32-c3-ard.yaml
diff --git a/tests/components/lcd_menu/test.esp8266.yaml b/tests/components/lcd_menu/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/lcd_menu/test.esp8266.yaml
rename to tests/components/lcd_menu/test.esp8266-ard.yaml
diff --git a/tests/components/lcd_menu/test.rp2040.yaml b/tests/components/lcd_menu/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/lcd_menu/test.rp2040.yaml
rename to tests/components/lcd_menu/test.rp2040-ard.yaml
diff --git a/tests/components/lcd_pcf8574/test.esp32.yaml b/tests/components/lcd_pcf8574/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/lcd_pcf8574/test.esp32.yaml
rename to tests/components/lcd_pcf8574/test.esp32-ard.yaml
diff --git a/tests/components/lcd_pcf8574/test.esp32-c3.yaml b/tests/components/lcd_pcf8574/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/lcd_pcf8574/test.esp32-c3.yaml
rename to tests/components/lcd_pcf8574/test.esp32-c3-ard.yaml
diff --git a/tests/components/lcd_pcf8574/test.esp8266.yaml b/tests/components/lcd_pcf8574/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/lcd_pcf8574/test.esp8266.yaml
rename to tests/components/lcd_pcf8574/test.esp8266-ard.yaml
diff --git a/tests/components/lcd_pcf8574/test.rp2040.yaml b/tests/components/lcd_pcf8574/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/lcd_pcf8574/test.rp2040.yaml
rename to tests/components/lcd_pcf8574/test.rp2040-ard.yaml
diff --git a/tests/components/ld2410/test.esp32.yaml b/tests/components/ld2410/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ld2410/test.esp32.yaml
rename to tests/components/ld2410/test.esp32-ard.yaml
diff --git a/tests/components/ld2410/test.esp32-c3.yaml b/tests/components/ld2410/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ld2410/test.esp32-c3.yaml
rename to tests/components/ld2410/test.esp32-c3-ard.yaml
diff --git a/tests/components/ld2410/test.esp8266.yaml b/tests/components/ld2410/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ld2410/test.esp8266.yaml
rename to tests/components/ld2410/test.esp8266-ard.yaml
diff --git a/tests/components/ld2410/test.rp2040.yaml b/tests/components/ld2410/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ld2410/test.rp2040.yaml
rename to tests/components/ld2410/test.rp2040-ard.yaml
diff --git a/tests/components/ld2420/test.esp32.yaml b/tests/components/ld2420/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ld2420/test.esp32.yaml
rename to tests/components/ld2420/test.esp32-ard.yaml
diff --git a/tests/components/ld2420/test.esp32-c3.yaml b/tests/components/ld2420/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ld2420/test.esp32-c3.yaml
rename to tests/components/ld2420/test.esp32-c3-ard.yaml
diff --git a/tests/components/ld2420/test.esp8266.yaml b/tests/components/ld2420/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ld2420/test.esp8266.yaml
rename to tests/components/ld2420/test.esp8266-ard.yaml
diff --git a/tests/components/ld2420/test.rp2040.yaml b/tests/components/ld2420/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ld2420/test.rp2040.yaml
rename to tests/components/ld2420/test.rp2040-ard.yaml
diff --git a/tests/components/improv_serial/test.esp8266.yaml b/tests/components/ledc/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/improv_serial/test.esp8266.yaml
rename to tests/components/ledc/test.esp32-ard.yaml
diff --git a/tests/components/improv_serial/test.rp2040.yaml b/tests/components/ledc/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/improv_serial/test.rp2040.yaml
rename to tests/components/ledc/test.esp32-c3-ard.yaml
diff --git a/tests/components/light/test.esp32.yaml b/tests/components/light/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/light/test.esp32.yaml
rename to tests/components/light/test.esp32-ard.yaml
diff --git a/tests/components/light/test.esp32-c3.yaml b/tests/components/light/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/light/test.esp32-c3.yaml
rename to tests/components/light/test.esp32-c3-ard.yaml
diff --git a/tests/components/light/test.esp8266.yaml b/tests/components/light/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/light/test.esp8266.yaml
rename to tests/components/light/test.esp8266-ard.yaml
diff --git a/tests/components/light/test.rp2040.yaml b/tests/components/light/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/light/test.rp2040.yaml
rename to tests/components/light/test.rp2040-ard.yaml
diff --git a/tests/components/inkbird_ibsth1_mini/test.esp32-c3.yaml b/tests/components/lightwaverf/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/inkbird_ibsth1_mini/test.esp32-c3.yaml
rename to tests/components/lightwaverf/test.esp8266-ard.yaml
diff --git a/tests/components/lilygo_t5_47/test.esp32.yaml b/tests/components/lilygo_t5_47/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/lilygo_t5_47/test.esp32.yaml
rename to tests/components/lilygo_t5_47/test.esp32-ard.yaml
diff --git a/tests/components/lilygo_t5_47/test.esp32-c3.yaml b/tests/components/lilygo_t5_47/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/lilygo_t5_47/test.esp32-c3.yaml
rename to tests/components/lilygo_t5_47/test.esp32-c3-ard.yaml
diff --git a/tests/components/lilygo_t5_47/test.esp8266.yaml b/tests/components/lilygo_t5_47/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/lilygo_t5_47/test.esp8266.yaml
rename to tests/components/lilygo_t5_47/test.esp8266-ard.yaml
diff --git a/tests/components/lilygo_t5_47/test.rp2040.yaml b/tests/components/lilygo_t5_47/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/lilygo_t5_47/test.rp2040.yaml
rename to tests/components/lilygo_t5_47/test.rp2040-ard.yaml
diff --git a/tests/components/inkbird_ibsth1_mini/test.esp32.yaml b/tests/components/lock/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/inkbird_ibsth1_mini/test.esp32.yaml
rename to tests/components/lock/test.esp32-ard.yaml
diff --git a/tests/components/inkplate6/test.esp32.yaml b/tests/components/lock/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/inkplate6/test.esp32.yaml
rename to tests/components/lock/test.esp32-c3-ard.yaml
diff --git a/tests/components/interval/test.esp32-c3.yaml b/tests/components/lock/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/interval/test.esp32-c3.yaml
rename to tests/components/lock/test.esp8266-ard.yaml
diff --git a/tests/components/interval/test.esp32.yaml b/tests/components/lock/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/interval/test.esp32.yaml
rename to tests/components/lock/test.rp2040-ard.yaml
diff --git a/tests/components/logger/common.yaml b/tests/components/logger/common-default_uart.yaml
similarity index 100%
rename from tests/components/logger/common.yaml
rename to tests/components/logger/common-default_uart.yaml
diff --git a/tests/components/logger/common-usb_cdc.yaml b/tests/components/logger/common-usb_cdc.yaml
new file mode 100644
index 0000000000..4df320527d
--- /dev/null
+++ b/tests/components/logger/common-usb_cdc.yaml
@@ -0,0 +1,8 @@
+esphome:
+  on_boot:
+    then:
+      - logger.log: Hello world
+
+logger:
+  level: DEBUG
+  hardware_uart: USB_CDC
diff --git a/tests/components/logger/common-usb_serial_jtag.yaml b/tests/components/logger/common-usb_serial_jtag.yaml
new file mode 100644
index 0000000000..5891c9ea40
--- /dev/null
+++ b/tests/components/logger/common-usb_serial_jtag.yaml
@@ -0,0 +1,8 @@
+esphome:
+  on_boot:
+    then:
+      - logger.log: Hello world
+
+logger:
+  level: DEBUG
+  hardware_uart: USB_SERIAL_JTAG
diff --git a/tests/components/logger/test-usb_cdc.esp32-c3-ard.yaml b/tests/components/logger/test-usb_cdc.esp32-c3-ard.yaml
new file mode 100644
index 0000000000..cfdaec9771
--- /dev/null
+++ b/tests/components/logger/test-usb_cdc.esp32-c3-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-usb_cdc.yaml
diff --git a/tests/components/logger/test-usb_cdc.esp32-s2-ard.yaml b/tests/components/logger/test-usb_cdc.esp32-s2-ard.yaml
new file mode 100644
index 0000000000..cfdaec9771
--- /dev/null
+++ b/tests/components/logger/test-usb_cdc.esp32-s2-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-usb_cdc.yaml
diff --git a/tests/components/logger/test-usb_cdc.esp32-s2-idf.yaml b/tests/components/logger/test-usb_cdc.esp32-s2-idf.yaml
new file mode 100644
index 0000000000..cfdaec9771
--- /dev/null
+++ b/tests/components/logger/test-usb_cdc.esp32-s2-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-usb_cdc.yaml
diff --git a/tests/components/logger/test-usb_cdc.esp32-s3-ard.yaml b/tests/components/logger/test-usb_cdc.esp32-s3-ard.yaml
new file mode 100644
index 0000000000..cfdaec9771
--- /dev/null
+++ b/tests/components/logger/test-usb_cdc.esp32-s3-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-usb_cdc.yaml
diff --git a/tests/components/logger/test-usb_serial_jtag.esp32-c3-idf.yaml b/tests/components/logger/test-usb_serial_jtag.esp32-c3-idf.yaml
new file mode 100644
index 0000000000..46a927ff10
--- /dev/null
+++ b/tests/components/logger/test-usb_serial_jtag.esp32-c3-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-usb_serial_jtag.yaml
diff --git a/tests/components/logger/test-usb_serial_jtag.esp32-s3-idf.yaml b/tests/components/logger/test-usb_serial_jtag.esp32-s3-idf.yaml
new file mode 100644
index 0000000000..46a927ff10
--- /dev/null
+++ b/tests/components/logger/test-usb_serial_jtag.esp32-s3-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-usb_serial_jtag.yaml
diff --git a/tests/components/logger/test.esp32-ard.yaml b/tests/components/logger/test.esp32-ard.yaml
new file mode 100644
index 0000000000..3fe04e18a3
--- /dev/null
+++ b/tests/components/logger/test.esp32-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-default_uart.yaml
diff --git a/tests/components/logger/test.esp32-c3-ard.yaml b/tests/components/logger/test.esp32-c3-ard.yaml
new file mode 100644
index 0000000000..3fe04e18a3
--- /dev/null
+++ b/tests/components/logger/test.esp32-c3-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-default_uart.yaml
diff --git a/tests/components/logger/test.esp32-c3-idf.yaml b/tests/components/logger/test.esp32-c3-idf.yaml
index dade44d145..3fe04e18a3 100644
--- a/tests/components/logger/test.esp32-c3-idf.yaml
+++ b/tests/components/logger/test.esp32-c3-idf.yaml
@@ -1 +1 @@
-<<: !include common.yaml
+<<: !include common-default_uart.yaml
diff --git a/tests/components/logger/test.esp32-idf.yaml b/tests/components/logger/test.esp32-idf.yaml
index dade44d145..3fe04e18a3 100644
--- a/tests/components/logger/test.esp32-idf.yaml
+++ b/tests/components/logger/test.esp32-idf.yaml
@@ -1 +1 @@
-<<: !include common.yaml
+<<: !include common-default_uart.yaml
diff --git a/tests/components/logger/test.esp8266-ard.yaml b/tests/components/logger/test.esp8266-ard.yaml
new file mode 100644
index 0000000000..3fe04e18a3
--- /dev/null
+++ b/tests/components/logger/test.esp8266-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-default_uart.yaml
diff --git a/tests/components/logger/test.rp2040-ard.yaml b/tests/components/logger/test.rp2040-ard.yaml
new file mode 100644
index 0000000000..3fe04e18a3
--- /dev/null
+++ b/tests/components/logger/test.rp2040-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-default_uart.yaml
diff --git a/tests/components/ltr390/test.esp32-ard.yaml b/tests/components/ltr390/test.esp32-ard.yaml
new file mode 100644
index 0000000000..bdfe349b77
--- /dev/null
+++ b/tests/components/ltr390/test.esp32-ard.yaml
@@ -0,0 +1,38 @@
+i2c:
+  - id: i2c_ltr390
+    scl: 16
+    sda: 17
+
+sensor:
+  - platform: ltr390
+    uv:
+      name: LTR390 UV
+    uv_index:
+      name: LTR390 UVI
+    light:
+      name: LTR390 Light
+    ambient_light:
+      name: LTR390 ALS
+    gain: X3
+    resolution: 18
+    window_correction_factor: 1.0
+    address: 0x53
+    update_interval: 60s
+  - platform: ltr390
+    uv:
+      name: LTR390 UV
+    uv_index:
+      name: LTR390 UVI
+    light:
+      name: LTR390 Light
+    ambient_light:
+      name: LTR390 ALS
+    gain:
+      ambient_light: X9
+      uv: X3
+    resolution:
+      ambient_light: 18
+      uv: 13
+    window_correction_factor: 1.0
+    address: 0x53
+    update_interval: 60s
diff --git a/tests/components/ltr390/test.esp32-c3.yaml b/tests/components/ltr390/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ltr390/test.esp32-c3.yaml
rename to tests/components/ltr390/test.esp32-c3-ard.yaml
diff --git a/tests/components/ltr390/test.esp32.yaml b/tests/components/ltr390/test.esp32.yaml
deleted file mode 100644
index 9786c7dac3..0000000000
--- a/tests/components/ltr390/test.esp32.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-i2c:
-  - id: i2c_ltr390
-    scl: 16
-    sda: 17
-
-sensor:
-  - platform: ltr390
-    uv:
-      name: LTR390 UV
-    uv_index:
-      name: LTR390 UVI
-    light:
-      name: LTR390 Light
-    ambient_light:
-      name: LTR390 ALS
-    gain: X3
-    resolution: 18
-    window_correction_factor: 1.0
-    address: 0x53
-    update_interval: 60s
diff --git a/tests/components/ltr390/test.rp2040.yaml b/tests/components/ltr390/test.esp8266-ard.yaml
similarity index 87%
rename from tests/components/ltr390/test.rp2040.yaml
rename to tests/components/ltr390/test.esp8266-ard.yaml
index fee0f37ce1..149f46f9c8 100644
--- a/tests/components/ltr390/test.rp2040.yaml
+++ b/tests/components/ltr390/test.esp8266-ard.yaml
@@ -13,7 +13,9 @@ sensor:
       name: LTR390 Light
     ambient_light:
       name: LTR390 ALS
-    gain: X3
+    gain:
+      ambient_light: X9
+      uv: X3
     resolution: 18
     window_correction_factor: 1.0
     address: 0x53
diff --git a/tests/components/ltr390/test.esp8266.yaml b/tests/components/ltr390/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ltr390/test.esp8266.yaml
rename to tests/components/ltr390/test.rp2040-ard.yaml
diff --git a/tests/components/ltr_als_ps/test.esp32.yaml b/tests/components/ltr_als_ps/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ltr_als_ps/test.esp32.yaml
rename to tests/components/ltr_als_ps/test.esp32-ard.yaml
diff --git a/tests/components/ltr_als_ps/test.esp32-c3.yaml b/tests/components/ltr_als_ps/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ltr_als_ps/test.esp32-c3.yaml
rename to tests/components/ltr_als_ps/test.esp32-c3-ard.yaml
diff --git a/tests/components/ltr_als_ps/test.esp8266.yaml b/tests/components/ltr_als_ps/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ltr_als_ps/test.esp8266.yaml
rename to tests/components/ltr_als_ps/test.esp8266-ard.yaml
diff --git a/tests/components/ltr_als_ps/test.rp2040.yaml b/tests/components/ltr_als_ps/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ltr_als_ps/test.rp2040.yaml
rename to tests/components/ltr_als_ps/test.rp2040-ard.yaml
diff --git a/tests/components/matrix_keypad/test.esp32.yaml b/tests/components/matrix_keypad/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/matrix_keypad/test.esp32.yaml
rename to tests/components/matrix_keypad/test.esp32-ard.yaml
diff --git a/tests/components/matrix_keypad/test.esp32-c3.yaml b/tests/components/matrix_keypad/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/matrix_keypad/test.esp32-c3.yaml
rename to tests/components/matrix_keypad/test.esp32-c3-ard.yaml
diff --git a/tests/components/matrix_keypad/test.esp8266.yaml b/tests/components/matrix_keypad/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/matrix_keypad/test.esp8266.yaml
rename to tests/components/matrix_keypad/test.esp8266-ard.yaml
diff --git a/tests/components/matrix_keypad/test.rp2040.yaml b/tests/components/matrix_keypad/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/matrix_keypad/test.rp2040.yaml
rename to tests/components/matrix_keypad/test.rp2040-ard.yaml
diff --git a/tests/components/max31855/test.esp32.yaml b/tests/components/max31855/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/max31855/test.esp32.yaml
rename to tests/components/max31855/test.esp32-ard.yaml
diff --git a/tests/components/max31855/test.esp32-c3.yaml b/tests/components/max31855/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/max31855/test.esp32-c3.yaml
rename to tests/components/max31855/test.esp32-c3-ard.yaml
diff --git a/tests/components/max31855/test.esp8266.yaml b/tests/components/max31855/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/max31855/test.esp8266.yaml
rename to tests/components/max31855/test.esp8266-ard.yaml
diff --git a/tests/components/max31855/test.rp2040.yaml b/tests/components/max31855/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/max31855/test.rp2040.yaml
rename to tests/components/max31855/test.rp2040-ard.yaml
diff --git a/tests/components/max31856/test.esp32.yaml b/tests/components/max31856/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/max31856/test.esp32.yaml
rename to tests/components/max31856/test.esp32-ard.yaml
diff --git a/tests/components/max31856/test.esp32-c3.yaml b/tests/components/max31856/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/max31856/test.esp32-c3.yaml
rename to tests/components/max31856/test.esp32-c3-ard.yaml
diff --git a/tests/components/max31856/test.esp8266.yaml b/tests/components/max31856/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/max31856/test.esp8266.yaml
rename to tests/components/max31856/test.esp8266-ard.yaml
diff --git a/tests/components/max31856/test.rp2040.yaml b/tests/components/max31856/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/max31856/test.rp2040.yaml
rename to tests/components/max31856/test.rp2040-ard.yaml
diff --git a/tests/components/max31865/test.esp32.yaml b/tests/components/max31865/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/max31865/test.esp32.yaml
rename to tests/components/max31865/test.esp32-ard.yaml
diff --git a/tests/components/max31865/test.esp32-c3.yaml b/tests/components/max31865/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/max31865/test.esp32-c3.yaml
rename to tests/components/max31865/test.esp32-c3-ard.yaml
diff --git a/tests/components/max31865/test.esp8266.yaml b/tests/components/max31865/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/max31865/test.esp8266.yaml
rename to tests/components/max31865/test.esp8266-ard.yaml
diff --git a/tests/components/max31865/test.rp2040.yaml b/tests/components/max31865/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/max31865/test.rp2040.yaml
rename to tests/components/max31865/test.rp2040-ard.yaml
diff --git a/tests/components/max44009/test.esp32.yaml b/tests/components/max44009/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/max44009/test.esp32.yaml
rename to tests/components/max44009/test.esp32-ard.yaml
diff --git a/tests/components/max44009/test.esp32-c3.yaml b/tests/components/max44009/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/max44009/test.esp32-c3.yaml
rename to tests/components/max44009/test.esp32-c3-ard.yaml
diff --git a/tests/components/max44009/test.esp8266.yaml b/tests/components/max44009/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/max44009/test.esp8266.yaml
rename to tests/components/max44009/test.esp8266-ard.yaml
diff --git a/tests/components/max44009/test.rp2040.yaml b/tests/components/max44009/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/max44009/test.rp2040.yaml
rename to tests/components/max44009/test.rp2040-ard.yaml
diff --git a/tests/components/max6675/test.esp32.yaml b/tests/components/max6675/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/max6675/test.esp32.yaml
rename to tests/components/max6675/test.esp32-ard.yaml
diff --git a/tests/components/max6675/test.esp32-c3.yaml b/tests/components/max6675/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/max6675/test.esp32-c3.yaml
rename to tests/components/max6675/test.esp32-c3-ard.yaml
diff --git a/tests/components/max6675/test.esp8266.yaml b/tests/components/max6675/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/max6675/test.esp8266.yaml
rename to tests/components/max6675/test.esp8266-ard.yaml
diff --git a/tests/components/max6675/test.rp2040.yaml b/tests/components/max6675/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/max6675/test.rp2040.yaml
rename to tests/components/max6675/test.rp2040-ard.yaml
diff --git a/tests/components/max6956/test.esp32.yaml b/tests/components/max6956/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/max6956/test.esp32.yaml
rename to tests/components/max6956/test.esp32-ard.yaml
diff --git a/tests/components/max6956/test.esp32-c3.yaml b/tests/components/max6956/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/max6956/test.esp32-c3.yaml
rename to tests/components/max6956/test.esp32-c3-ard.yaml
diff --git a/tests/components/max6956/test.esp8266.yaml b/tests/components/max6956/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/max6956/test.esp8266.yaml
rename to tests/components/max6956/test.esp8266-ard.yaml
diff --git a/tests/components/max6956/test.rp2040.yaml b/tests/components/max6956/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/max6956/test.rp2040.yaml
rename to tests/components/max6956/test.rp2040-ard.yaml
diff --git a/tests/components/max7219/test.esp32.yaml b/tests/components/max7219/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/max7219/test.esp32.yaml
rename to tests/components/max7219/test.esp32-ard.yaml
diff --git a/tests/components/max7219/test.esp32-c3.yaml b/tests/components/max7219/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/max7219/test.esp32-c3.yaml
rename to tests/components/max7219/test.esp32-c3-ard.yaml
diff --git a/tests/components/max7219/test.esp8266.yaml b/tests/components/max7219/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/max7219/test.esp8266.yaml
rename to tests/components/max7219/test.esp8266-ard.yaml
diff --git a/tests/components/max7219/test.rp2040.yaml b/tests/components/max7219/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/max7219/test.rp2040.yaml
rename to tests/components/max7219/test.rp2040-ard.yaml
diff --git a/tests/components/max7219digit/test.esp32.yaml b/tests/components/max7219digit/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/max7219digit/test.esp32.yaml
rename to tests/components/max7219digit/test.esp32-ard.yaml
diff --git a/tests/components/max7219digit/test.esp32-c3.yaml b/tests/components/max7219digit/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/max7219digit/test.esp32-c3.yaml
rename to tests/components/max7219digit/test.esp32-c3-ard.yaml
diff --git a/tests/components/max7219digit/test.esp8266.yaml b/tests/components/max7219digit/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/max7219digit/test.esp8266.yaml
rename to tests/components/max7219digit/test.esp8266-ard.yaml
diff --git a/tests/components/max7219digit/test.rp2040.yaml b/tests/components/max7219digit/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/max7219digit/test.rp2040.yaml
rename to tests/components/max7219digit/test.rp2040-ard.yaml
diff --git a/tests/components/max9611/test.esp32.yaml b/tests/components/max9611/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/max9611/test.esp32.yaml
rename to tests/components/max9611/test.esp32-ard.yaml
diff --git a/tests/components/max9611/test.esp32-c3.yaml b/tests/components/max9611/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/max9611/test.esp32-c3.yaml
rename to tests/components/max9611/test.esp32-c3-ard.yaml
diff --git a/tests/components/max9611/test.esp8266.yaml b/tests/components/max9611/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/max9611/test.esp8266.yaml
rename to tests/components/max9611/test.esp8266-ard.yaml
diff --git a/tests/components/max9611/test.rp2040.yaml b/tests/components/max9611/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/max9611/test.rp2040.yaml
rename to tests/components/max9611/test.rp2040-ard.yaml
diff --git a/tests/components/mcp23008/test.esp32.yaml b/tests/components/mcp23008/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mcp23008/test.esp32.yaml
rename to tests/components/mcp23008/test.esp32-ard.yaml
diff --git a/tests/components/mcp23008/test.esp32-c3.yaml b/tests/components/mcp23008/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mcp23008/test.esp32-c3.yaml
rename to tests/components/mcp23008/test.esp32-c3-ard.yaml
diff --git a/tests/components/mcp23008/test.esp8266.yaml b/tests/components/mcp23008/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mcp23008/test.esp8266.yaml
rename to tests/components/mcp23008/test.esp8266-ard.yaml
diff --git a/tests/components/mcp23008/test.rp2040.yaml b/tests/components/mcp23008/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mcp23008/test.rp2040.yaml
rename to tests/components/mcp23008/test.rp2040-ard.yaml
diff --git a/tests/components/mcp23016/test.esp32.yaml b/tests/components/mcp23016/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mcp23016/test.esp32.yaml
rename to tests/components/mcp23016/test.esp32-ard.yaml
diff --git a/tests/components/mcp23016/test.esp32-c3.yaml b/tests/components/mcp23016/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mcp23016/test.esp32-c3.yaml
rename to tests/components/mcp23016/test.esp32-c3-ard.yaml
diff --git a/tests/components/mcp23016/test.esp8266.yaml b/tests/components/mcp23016/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mcp23016/test.esp8266.yaml
rename to tests/components/mcp23016/test.esp8266-ard.yaml
diff --git a/tests/components/mcp23016/test.rp2040.yaml b/tests/components/mcp23016/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mcp23016/test.rp2040.yaml
rename to tests/components/mcp23016/test.rp2040-ard.yaml
diff --git a/tests/components/mcp23017/test.esp32.yaml b/tests/components/mcp23017/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mcp23017/test.esp32.yaml
rename to tests/components/mcp23017/test.esp32-ard.yaml
diff --git a/tests/components/mcp23017/test.esp32-c3.yaml b/tests/components/mcp23017/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mcp23017/test.esp32-c3.yaml
rename to tests/components/mcp23017/test.esp32-c3-ard.yaml
diff --git a/tests/components/mcp23017/test.esp8266.yaml b/tests/components/mcp23017/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mcp23017/test.esp8266.yaml
rename to tests/components/mcp23017/test.esp8266-ard.yaml
diff --git a/tests/components/mcp23017/test.rp2040.yaml b/tests/components/mcp23017/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mcp23017/test.rp2040.yaml
rename to tests/components/mcp23017/test.rp2040-ard.yaml
diff --git a/tests/components/mcp23s08/test.esp32.yaml b/tests/components/mcp23s08/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mcp23s08/test.esp32.yaml
rename to tests/components/mcp23s08/test.esp32-ard.yaml
diff --git a/tests/components/mcp23s08/test.esp32-c3.yaml b/tests/components/mcp23s08/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mcp23s08/test.esp32-c3.yaml
rename to tests/components/mcp23s08/test.esp32-c3-ard.yaml
diff --git a/tests/components/mcp23s08/test.esp8266.yaml b/tests/components/mcp23s08/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mcp23s08/test.esp8266.yaml
rename to tests/components/mcp23s08/test.esp8266-ard.yaml
diff --git a/tests/components/mcp23s08/test.rp2040.yaml b/tests/components/mcp23s08/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mcp23s08/test.rp2040.yaml
rename to tests/components/mcp23s08/test.rp2040-ard.yaml
diff --git a/tests/components/mcp23s17/test.esp32.yaml b/tests/components/mcp23s17/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mcp23s17/test.esp32.yaml
rename to tests/components/mcp23s17/test.esp32-ard.yaml
diff --git a/tests/components/mcp23s17/test.esp32-c3.yaml b/tests/components/mcp23s17/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mcp23s17/test.esp32-c3.yaml
rename to tests/components/mcp23s17/test.esp32-c3-ard.yaml
diff --git a/tests/components/mcp23s17/test.esp8266.yaml b/tests/components/mcp23s17/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mcp23s17/test.esp8266.yaml
rename to tests/components/mcp23s17/test.esp8266-ard.yaml
diff --git a/tests/components/mcp23s17/test.rp2040.yaml b/tests/components/mcp23s17/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mcp23s17/test.rp2040.yaml
rename to tests/components/mcp23s17/test.rp2040-ard.yaml
diff --git a/tests/components/mcp2515/test.esp32.yaml b/tests/components/mcp2515/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mcp2515/test.esp32.yaml
rename to tests/components/mcp2515/test.esp32-ard.yaml
diff --git a/tests/components/mcp2515/test.esp32-c3.yaml b/tests/components/mcp2515/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mcp2515/test.esp32-c3.yaml
rename to tests/components/mcp2515/test.esp32-c3-ard.yaml
diff --git a/tests/components/mcp2515/test.esp8266.yaml b/tests/components/mcp2515/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mcp2515/test.esp8266.yaml
rename to tests/components/mcp2515/test.esp8266-ard.yaml
diff --git a/tests/components/mcp2515/test.rp2040.yaml b/tests/components/mcp2515/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mcp2515/test.rp2040.yaml
rename to tests/components/mcp2515/test.rp2040-ard.yaml
diff --git a/tests/components/mcp3008/test.esp32.yaml b/tests/components/mcp3008/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mcp3008/test.esp32.yaml
rename to tests/components/mcp3008/test.esp32-ard.yaml
diff --git a/tests/components/mcp3008/test.esp32-c3.yaml b/tests/components/mcp3008/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mcp3008/test.esp32-c3.yaml
rename to tests/components/mcp3008/test.esp32-c3-ard.yaml
diff --git a/tests/components/mcp3008/test.esp8266.yaml b/tests/components/mcp3008/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mcp3008/test.esp8266.yaml
rename to tests/components/mcp3008/test.esp8266-ard.yaml
diff --git a/tests/components/mcp3008/test.rp2040.yaml b/tests/components/mcp3008/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mcp3008/test.rp2040.yaml
rename to tests/components/mcp3008/test.rp2040-ard.yaml
diff --git a/tests/components/mcp3204/test.esp32.yaml b/tests/components/mcp3204/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mcp3204/test.esp32.yaml
rename to tests/components/mcp3204/test.esp32-ard.yaml
diff --git a/tests/components/mcp3204/test.esp32-c3.yaml b/tests/components/mcp3204/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mcp3204/test.esp32-c3.yaml
rename to tests/components/mcp3204/test.esp32-c3-ard.yaml
diff --git a/tests/components/mcp3204/test.esp8266.yaml b/tests/components/mcp3204/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mcp3204/test.esp8266.yaml
rename to tests/components/mcp3204/test.esp8266-ard.yaml
diff --git a/tests/components/mcp3204/test.rp2040.yaml b/tests/components/mcp3204/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mcp3204/test.rp2040.yaml
rename to tests/components/mcp3204/test.rp2040-ard.yaml
diff --git a/tests/components/mcp4725/test.esp32.yaml b/tests/components/mcp4725/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mcp4725/test.esp32.yaml
rename to tests/components/mcp4725/test.esp32-ard.yaml
diff --git a/tests/components/mcp4725/test.esp32-c3.yaml b/tests/components/mcp4725/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mcp4725/test.esp32-c3.yaml
rename to tests/components/mcp4725/test.esp32-c3-ard.yaml
diff --git a/tests/components/mcp4725/test.esp8266.yaml b/tests/components/mcp4725/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mcp4725/test.esp8266.yaml
rename to tests/components/mcp4725/test.esp8266-ard.yaml
diff --git a/tests/components/mcp4725/test.rp2040.yaml b/tests/components/mcp4725/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mcp4725/test.rp2040.yaml
rename to tests/components/mcp4725/test.rp2040-ard.yaml
diff --git a/tests/components/mcp4728/test.esp32.yaml b/tests/components/mcp4728/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mcp4728/test.esp32.yaml
rename to tests/components/mcp4728/test.esp32-ard.yaml
diff --git a/tests/components/mcp4728/test.esp32-c3.yaml b/tests/components/mcp4728/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mcp4728/test.esp32-c3.yaml
rename to tests/components/mcp4728/test.esp32-c3-ard.yaml
diff --git a/tests/components/mcp4728/test.esp8266.yaml b/tests/components/mcp4728/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mcp4728/test.esp8266.yaml
rename to tests/components/mcp4728/test.esp8266-ard.yaml
diff --git a/tests/components/mcp4728/test.rp2040.yaml b/tests/components/mcp4728/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mcp4728/test.rp2040.yaml
rename to tests/components/mcp4728/test.rp2040-ard.yaml
diff --git a/tests/components/mcp47a1/test.esp32.yaml b/tests/components/mcp47a1/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mcp47a1/test.esp32.yaml
rename to tests/components/mcp47a1/test.esp32-ard.yaml
diff --git a/tests/components/mcp47a1/test.esp32-c3.yaml b/tests/components/mcp47a1/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mcp47a1/test.esp32-c3.yaml
rename to tests/components/mcp47a1/test.esp32-c3-ard.yaml
diff --git a/tests/components/mcp47a1/test.esp8266.yaml b/tests/components/mcp47a1/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mcp47a1/test.esp8266.yaml
rename to tests/components/mcp47a1/test.esp8266-ard.yaml
diff --git a/tests/components/mcp47a1/test.rp2040.yaml b/tests/components/mcp47a1/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mcp47a1/test.rp2040.yaml
rename to tests/components/mcp47a1/test.rp2040-ard.yaml
diff --git a/tests/components/mcp9600/test.esp32.yaml b/tests/components/mcp9600/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mcp9600/test.esp32.yaml
rename to tests/components/mcp9600/test.esp32-ard.yaml
diff --git a/tests/components/mcp9600/test.esp32-c3.yaml b/tests/components/mcp9600/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mcp9600/test.esp32-c3.yaml
rename to tests/components/mcp9600/test.esp32-c3-ard.yaml
diff --git a/tests/components/mcp9600/test.esp8266.yaml b/tests/components/mcp9600/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mcp9600/test.esp8266.yaml
rename to tests/components/mcp9600/test.esp8266-ard.yaml
diff --git a/tests/components/mcp9600/test.rp2040.yaml b/tests/components/mcp9600/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mcp9600/test.rp2040.yaml
rename to tests/components/mcp9600/test.rp2040-ard.yaml
diff --git a/tests/components/mcp9808/test.esp32.yaml b/tests/components/mcp9808/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mcp9808/test.esp32.yaml
rename to tests/components/mcp9808/test.esp32-ard.yaml
diff --git a/tests/components/mcp9808/test.esp32-c3.yaml b/tests/components/mcp9808/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mcp9808/test.esp32-c3.yaml
rename to tests/components/mcp9808/test.esp32-c3-ard.yaml
diff --git a/tests/components/mcp9808/test.esp8266.yaml b/tests/components/mcp9808/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mcp9808/test.esp8266.yaml
rename to tests/components/mcp9808/test.esp8266-ard.yaml
diff --git a/tests/components/mcp9808/test.rp2040.yaml b/tests/components/mcp9808/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mcp9808/test.rp2040.yaml
rename to tests/components/mcp9808/test.rp2040-ard.yaml
diff --git a/tests/components/mdns/common.yaml b/tests/components/mdns/common-enabled.yaml
similarity index 100%
rename from tests/components/mdns/common.yaml
rename to tests/components/mdns/common-enabled.yaml
diff --git a/tests/components/improv_serial/common.yaml b/tests/components/mdns/test-disabled.esp32-idf.yaml
similarity index 65%
rename from tests/components/improv_serial/common.yaml
rename to tests/components/mdns/test-disabled.esp32-idf.yaml
index b36fe5a4a7..07c70bf248 100644
--- a/tests/components/improv_serial/common.yaml
+++ b/tests/components/mdns/test-disabled.esp32-idf.yaml
@@ -2,4 +2,5 @@ wifi:
   ssid: MySSID
   password: password1
 
-improv_serial:
+mdns:
+  disabled: true
diff --git a/tests/components/mdns/test-enabled.esp32-ard.yaml b/tests/components/mdns/test-enabled.esp32-ard.yaml
new file mode 100644
index 0000000000..97fd63d70e
--- /dev/null
+++ b/tests/components/mdns/test-enabled.esp32-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-enabled.yaml
diff --git a/tests/components/mdns/test-enabled.esp32-c3-ard.yaml b/tests/components/mdns/test-enabled.esp32-c3-ard.yaml
new file mode 100644
index 0000000000..97fd63d70e
--- /dev/null
+++ b/tests/components/mdns/test-enabled.esp32-c3-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-enabled.yaml
diff --git a/tests/components/mdns/test-enabled.esp32-c3-idf.yaml b/tests/components/mdns/test-enabled.esp32-c3-idf.yaml
new file mode 100644
index 0000000000..97fd63d70e
--- /dev/null
+++ b/tests/components/mdns/test-enabled.esp32-c3-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-enabled.yaml
diff --git a/tests/components/mdns/test-enabled.esp32-idf.yaml b/tests/components/mdns/test-enabled.esp32-idf.yaml
new file mode 100644
index 0000000000..97fd63d70e
--- /dev/null
+++ b/tests/components/mdns/test-enabled.esp32-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-enabled.yaml
diff --git a/tests/components/mdns/test-enabled.esp8266-ard.yaml b/tests/components/mdns/test-enabled.esp8266-ard.yaml
new file mode 100644
index 0000000000..97fd63d70e
--- /dev/null
+++ b/tests/components/mdns/test-enabled.esp8266-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-enabled.yaml
diff --git a/tests/components/mdns/test-enabled.rp2040-ard.yaml b/tests/components/mdns/test-enabled.rp2040-ard.yaml
new file mode 100644
index 0000000000..97fd63d70e
--- /dev/null
+++ b/tests/components/mdns/test-enabled.rp2040-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-enabled.yaml
diff --git a/tests/components/interval/test.esp8266.yaml b/tests/components/media_player/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/interval/test.esp8266.yaml
rename to tests/components/media_player/test.esp32-ard.yaml
diff --git a/tests/components/mhz19/test.esp32.yaml b/tests/components/mhz19/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mhz19/test.esp32.yaml
rename to tests/components/mhz19/test.esp32-ard.yaml
diff --git a/tests/components/mhz19/test.esp32-c3.yaml b/tests/components/mhz19/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mhz19/test.esp32-c3.yaml
rename to tests/components/mhz19/test.esp32-c3-ard.yaml
diff --git a/tests/components/mhz19/test.esp8266.yaml b/tests/components/mhz19/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mhz19/test.esp8266.yaml
rename to tests/components/mhz19/test.esp8266-ard.yaml
diff --git a/tests/components/mhz19/test.rp2040.yaml b/tests/components/mhz19/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mhz19/test.rp2040.yaml
rename to tests/components/mhz19/test.rp2040-ard.yaml
diff --git a/tests/components/micro_wake_word/common.yaml b/tests/components/micro_wake_word/common.yaml
index c0f3593cc6..8bd7345307 100644
--- a/tests/components/micro_wake_word/common.yaml
+++ b/tests/components/micro_wake_word/common.yaml
@@ -10,6 +10,10 @@ microphone:
     pdm: true
 
 micro_wake_word:
-  model: hey_jarvis
   on_wake_word_detected:
     - logger.log: "Wake word detected"
+  models:
+    - model: hey_jarvis
+      probability_cutoff: 0.7
+    - model: okay_nabu
+      sliding_window_size: 5
diff --git a/tests/components/mdns/test.esp32-idf.yaml b/tests/components/micro_wake_word/test.esp32-idf.yaml
similarity index 100%
rename from tests/components/mdns/test.esp32-idf.yaml
rename to tests/components/micro_wake_word/test.esp32-idf.yaml
diff --git a/tests/components/micronova/test.esp32.yaml b/tests/components/micronova/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/micronova/test.esp32.yaml
rename to tests/components/micronova/test.esp32-ard.yaml
diff --git a/tests/components/micronova/test.esp32-c3.yaml b/tests/components/micronova/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/micronova/test.esp32-c3.yaml
rename to tests/components/micronova/test.esp32-c3-ard.yaml
diff --git a/tests/components/micronova/test.esp8266.yaml b/tests/components/micronova/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/micronova/test.esp8266.yaml
rename to tests/components/micronova/test.esp8266-ard.yaml
diff --git a/tests/components/micronova/test.rp2040.yaml b/tests/components/micronova/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/micronova/test.rp2040.yaml
rename to tests/components/micronova/test.rp2040-ard.yaml
diff --git a/tests/components/microphone/test.esp32.yaml b/tests/components/microphone/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/microphone/test.esp32.yaml
rename to tests/components/microphone/test.esp32-ard.yaml
diff --git a/tests/components/microphone/test.esp32-c3.yaml b/tests/components/microphone/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/microphone/test.esp32-c3.yaml
rename to tests/components/microphone/test.esp32-c3-ard.yaml
diff --git a/tests/components/mics_4514/test.esp32.yaml b/tests/components/mics_4514/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mics_4514/test.esp32.yaml
rename to tests/components/mics_4514/test.esp32-ard.yaml
diff --git a/tests/components/mics_4514/test.esp32-c3.yaml b/tests/components/mics_4514/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mics_4514/test.esp32-c3.yaml
rename to tests/components/mics_4514/test.esp32-c3-ard.yaml
diff --git a/tests/components/mics_4514/test.esp8266.yaml b/tests/components/mics_4514/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mics_4514/test.esp8266.yaml
rename to tests/components/mics_4514/test.esp8266-ard.yaml
diff --git a/tests/components/mics_4514/test.rp2040.yaml b/tests/components/mics_4514/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mics_4514/test.rp2040.yaml
rename to tests/components/mics_4514/test.rp2040-ard.yaml
diff --git a/tests/components/midea/test.esp32.yaml b/tests/components/midea/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/midea/test.esp32.yaml
rename to tests/components/midea/test.esp32-ard.yaml
diff --git a/tests/components/midea/test.esp32-c3.yaml b/tests/components/midea/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/midea/test.esp32-c3.yaml
rename to tests/components/midea/test.esp32-c3-ard.yaml
diff --git a/tests/components/midea/test.esp8266.yaml b/tests/components/midea/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/midea/test.esp8266.yaml
rename to tests/components/midea/test.esp8266-ard.yaml
diff --git a/tests/components/interval/test.rp2040.yaml b/tests/components/midea_ir/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/interval/test.rp2040.yaml
rename to tests/components/midea_ir/test.esp32-ard.yaml
diff --git a/tests/components/ledc/test.esp32-c3.yaml b/tests/components/midea_ir/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ledc/test.esp32-c3.yaml
rename to tests/components/midea_ir/test.esp32-c3-ard.yaml
diff --git a/tests/components/ledc/test.esp32.yaml b/tests/components/midea_ir/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ledc/test.esp32.yaml
rename to tests/components/midea_ir/test.esp8266-ard.yaml
diff --git a/tests/components/lightwaverf/test.esp8266.yaml b/tests/components/mitsubishi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/lightwaverf/test.esp8266.yaml
rename to tests/components/mitsubishi/test.esp32-ard.yaml
diff --git a/tests/components/lock/test.esp32-c3.yaml b/tests/components/mitsubishi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/lock/test.esp32-c3.yaml
rename to tests/components/mitsubishi/test.esp32-c3-ard.yaml
diff --git a/tests/components/lock/test.esp32.yaml b/tests/components/mitsubishi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/lock/test.esp32.yaml
rename to tests/components/mitsubishi/test.esp8266-ard.yaml
diff --git a/tests/components/mlx90393/test.esp32.yaml b/tests/components/mlx90393/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mlx90393/test.esp32.yaml
rename to tests/components/mlx90393/test.esp32-ard.yaml
diff --git a/tests/components/mlx90393/test.esp32-c3.yaml b/tests/components/mlx90393/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mlx90393/test.esp32-c3.yaml
rename to tests/components/mlx90393/test.esp32-c3-ard.yaml
diff --git a/tests/components/mlx90393/test.esp8266.yaml b/tests/components/mlx90393/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mlx90393/test.esp8266.yaml
rename to tests/components/mlx90393/test.esp8266-ard.yaml
diff --git a/tests/components/mlx90393/test.rp2040.yaml b/tests/components/mlx90393/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mlx90393/test.rp2040.yaml
rename to tests/components/mlx90393/test.rp2040-ard.yaml
diff --git a/tests/components/mlx90614/test.esp32.yaml b/tests/components/mlx90614/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mlx90614/test.esp32.yaml
rename to tests/components/mlx90614/test.esp32-ard.yaml
diff --git a/tests/components/mlx90614/test.esp32-c3.yaml b/tests/components/mlx90614/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mlx90614/test.esp32-c3.yaml
rename to tests/components/mlx90614/test.esp32-c3-ard.yaml
diff --git a/tests/components/mlx90614/test.esp8266.yaml b/tests/components/mlx90614/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mlx90614/test.esp8266.yaml
rename to tests/components/mlx90614/test.esp8266-ard.yaml
diff --git a/tests/components/mlx90614/test.rp2040.yaml b/tests/components/mlx90614/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mlx90614/test.rp2040.yaml
rename to tests/components/mlx90614/test.rp2040-ard.yaml
diff --git a/tests/components/mmc5603/test.esp32.yaml b/tests/components/mmc5603/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mmc5603/test.esp32.yaml
rename to tests/components/mmc5603/test.esp32-ard.yaml
diff --git a/tests/components/mmc5603/test.esp32-c3.yaml b/tests/components/mmc5603/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mmc5603/test.esp32-c3.yaml
rename to tests/components/mmc5603/test.esp32-c3-ard.yaml
diff --git a/tests/components/mmc5603/test.esp8266.yaml b/tests/components/mmc5603/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mmc5603/test.esp8266.yaml
rename to tests/components/mmc5603/test.esp8266-ard.yaml
diff --git a/tests/components/mmc5603/test.rp2040.yaml b/tests/components/mmc5603/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mmc5603/test.rp2040.yaml
rename to tests/components/mmc5603/test.rp2040-ard.yaml
diff --git a/tests/components/mmc5983/test.esp32.yaml b/tests/components/mmc5983/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mmc5983/test.esp32.yaml
rename to tests/components/mmc5983/test.esp32-ard.yaml
diff --git a/tests/components/mmc5983/test.esp32-c3.yaml b/tests/components/mmc5983/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mmc5983/test.esp32-c3.yaml
rename to tests/components/mmc5983/test.esp32-c3-ard.yaml
diff --git a/tests/components/mmc5983/test.esp8266.yaml b/tests/components/mmc5983/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mmc5983/test.esp8266.yaml
rename to tests/components/mmc5983/test.esp8266-ard.yaml
diff --git a/tests/components/mmc5983/test.rp2040.yaml b/tests/components/mmc5983/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mmc5983/test.rp2040.yaml
rename to tests/components/mmc5983/test.rp2040-ard.yaml
diff --git a/tests/components/modbus/test.esp32.yaml b/tests/components/modbus/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/modbus/test.esp32.yaml
rename to tests/components/modbus/test.esp32-ard.yaml
diff --git a/tests/components/modbus/test.esp32-c3.yaml b/tests/components/modbus/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/modbus/test.esp32-c3.yaml
rename to tests/components/modbus/test.esp32-c3-ard.yaml
diff --git a/tests/components/modbus/test.esp8266.yaml b/tests/components/modbus/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/modbus/test.esp8266.yaml
rename to tests/components/modbus/test.esp8266-ard.yaml
diff --git a/tests/components/modbus/test.rp2040.yaml b/tests/components/modbus/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/modbus/test.rp2040.yaml
rename to tests/components/modbus/test.rp2040-ard.yaml
diff --git a/tests/components/modbus_controller/test.esp32.yaml b/tests/components/modbus_controller/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/modbus_controller/test.esp32.yaml
rename to tests/components/modbus_controller/test.esp32-ard.yaml
diff --git a/tests/components/modbus_controller/test.esp32-c3.yaml b/tests/components/modbus_controller/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/modbus_controller/test.esp32-c3.yaml
rename to tests/components/modbus_controller/test.esp32-c3-ard.yaml
diff --git a/tests/components/modbus_controller/test.esp8266.yaml b/tests/components/modbus_controller/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/modbus_controller/test.esp8266.yaml
rename to tests/components/modbus_controller/test.esp8266-ard.yaml
diff --git a/tests/components/modbus_controller/test.rp2040.yaml b/tests/components/modbus_controller/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/modbus_controller/test.rp2040.yaml
rename to tests/components/modbus_controller/test.rp2040-ard.yaml
diff --git a/tests/components/monochromatic/test.esp32-c3.yaml b/tests/components/monochromatic/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/monochromatic/test.esp32-c3.yaml
rename to tests/components/monochromatic/test.esp32-ard.yaml
diff --git a/tests/components/monochromatic/test.esp32.yaml b/tests/components/monochromatic/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/monochromatic/test.esp32.yaml
rename to tests/components/monochromatic/test.esp32-c3-ard.yaml
diff --git a/tests/components/monochromatic/test.esp8266.yaml b/tests/components/monochromatic/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/monochromatic/test.esp8266.yaml
rename to tests/components/monochromatic/test.esp8266-ard.yaml
diff --git a/tests/components/monochromatic/test.rp2040.yaml b/tests/components/monochromatic/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/monochromatic/test.rp2040.yaml
rename to tests/components/monochromatic/test.rp2040-ard.yaml
diff --git a/tests/components/lock/test.esp8266.yaml b/tests/components/mopeka_ble/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/lock/test.esp8266.yaml
rename to tests/components/mopeka_ble/test.esp32-ard.yaml
diff --git a/tests/components/lock/test.rp2040.yaml b/tests/components/mopeka_ble/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/lock/test.rp2040.yaml
rename to tests/components/mopeka_ble/test.esp32-c3-ard.yaml
diff --git a/tests/components/logger/test.esp32-c3.yaml b/tests/components/mopeka_pro_check/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/logger/test.esp32-c3.yaml
rename to tests/components/mopeka_pro_check/test.esp32-ard.yaml
diff --git a/tests/components/logger/test.esp32.yaml b/tests/components/mopeka_pro_check/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/logger/test.esp32.yaml
rename to tests/components/mopeka_pro_check/test.esp32-c3-ard.yaml
diff --git a/tests/components/logger/test.esp8266.yaml b/tests/components/mopeka_std_check/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/logger/test.esp8266.yaml
rename to tests/components/mopeka_std_check/test.esp32-ard.yaml
diff --git a/tests/components/logger/test.rp2040.yaml b/tests/components/mopeka_std_check/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/logger/test.rp2040.yaml
rename to tests/components/mopeka_std_check/test.esp32-c3-ard.yaml
diff --git a/tests/components/mpl3115a2/test.esp32.yaml b/tests/components/mpl3115a2/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mpl3115a2/test.esp32.yaml
rename to tests/components/mpl3115a2/test.esp32-ard.yaml
diff --git a/tests/components/mpl3115a2/test.esp32-c3.yaml b/tests/components/mpl3115a2/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mpl3115a2/test.esp32-c3.yaml
rename to tests/components/mpl3115a2/test.esp32-c3-ard.yaml
diff --git a/tests/components/mpl3115a2/test.esp8266.yaml b/tests/components/mpl3115a2/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mpl3115a2/test.esp8266.yaml
rename to tests/components/mpl3115a2/test.esp8266-ard.yaml
diff --git a/tests/components/mpl3115a2/test.rp2040.yaml b/tests/components/mpl3115a2/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mpl3115a2/test.rp2040.yaml
rename to tests/components/mpl3115a2/test.rp2040-ard.yaml
diff --git a/tests/components/mpr121/test.esp32.yaml b/tests/components/mpr121/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mpr121/test.esp32.yaml
rename to tests/components/mpr121/test.esp32-ard.yaml
diff --git a/tests/components/mpr121/test.esp32-c3.yaml b/tests/components/mpr121/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mpr121/test.esp32-c3.yaml
rename to tests/components/mpr121/test.esp32-c3-ard.yaml
diff --git a/tests/components/mpr121/test.esp8266.yaml b/tests/components/mpr121/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mpr121/test.esp8266.yaml
rename to tests/components/mpr121/test.esp8266-ard.yaml
diff --git a/tests/components/mpr121/test.rp2040.yaml b/tests/components/mpr121/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mpr121/test.rp2040.yaml
rename to tests/components/mpr121/test.rp2040-ard.yaml
diff --git a/tests/components/mpu6050/test.esp32.yaml b/tests/components/mpu6050/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mpu6050/test.esp32.yaml
rename to tests/components/mpu6050/test.esp32-ard.yaml
diff --git a/tests/components/mpu6050/test.esp32-c3.yaml b/tests/components/mpu6050/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mpu6050/test.esp32-c3.yaml
rename to tests/components/mpu6050/test.esp32-c3-ard.yaml
diff --git a/tests/components/mpu6050/test.esp8266.yaml b/tests/components/mpu6050/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mpu6050/test.esp8266.yaml
rename to tests/components/mpu6050/test.esp8266-ard.yaml
diff --git a/tests/components/mpu6050/test.rp2040.yaml b/tests/components/mpu6050/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mpu6050/test.rp2040.yaml
rename to tests/components/mpu6050/test.rp2040-ard.yaml
diff --git a/tests/components/mpu6886/test.esp32.yaml b/tests/components/mpu6886/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mpu6886/test.esp32.yaml
rename to tests/components/mpu6886/test.esp32-ard.yaml
diff --git a/tests/components/mpu6886/test.esp32-c3.yaml b/tests/components/mpu6886/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mpu6886/test.esp32-c3.yaml
rename to tests/components/mpu6886/test.esp32-c3-ard.yaml
diff --git a/tests/components/mpu6886/test.esp8266.yaml b/tests/components/mpu6886/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mpu6886/test.esp8266.yaml
rename to tests/components/mpu6886/test.esp8266-ard.yaml
diff --git a/tests/components/mpu6886/test.rp2040.yaml b/tests/components/mpu6886/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mpu6886/test.rp2040.yaml
rename to tests/components/mpu6886/test.rp2040-ard.yaml
diff --git a/tests/components/mqtt/test.bk72xx.yaml b/tests/components/mqtt/test.bk72xx-ard.yaml
similarity index 100%
rename from tests/components/mqtt/test.bk72xx.yaml
rename to tests/components/mqtt/test.bk72xx-ard.yaml
diff --git a/tests/components/mqtt/test.esp32-c3.yaml b/tests/components/mqtt/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mqtt/test.esp32-c3.yaml
rename to tests/components/mqtt/test.esp32-ard.yaml
diff --git a/tests/components/mqtt/test.esp32.yaml b/tests/components/mqtt/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mqtt/test.esp32.yaml
rename to tests/components/mqtt/test.esp32-c3-ard.yaml
diff --git a/tests/components/mqtt/test.esp8266.yaml b/tests/components/mqtt/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mqtt/test.esp8266.yaml
rename to tests/components/mqtt/test.esp8266-ard.yaml
diff --git a/tests/components/mqtt_subscribe/test.esp32-c3.yaml b/tests/components/mqtt_subscribe/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mqtt_subscribe/test.esp32-c3.yaml
rename to tests/components/mqtt_subscribe/test.esp32-ard.yaml
diff --git a/tests/components/mqtt_subscribe/test.esp32.yaml b/tests/components/mqtt_subscribe/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mqtt_subscribe/test.esp32.yaml
rename to tests/components/mqtt_subscribe/test.esp32-c3-ard.yaml
diff --git a/tests/components/mqtt_subscribe/test.esp8266.yaml b/tests/components/mqtt_subscribe/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mqtt_subscribe/test.esp8266.yaml
rename to tests/components/mqtt_subscribe/test.esp8266-ard.yaml
diff --git a/tests/components/ms5611/test.esp32.yaml b/tests/components/ms5611/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ms5611/test.esp32.yaml
rename to tests/components/ms5611/test.esp32-ard.yaml
diff --git a/tests/components/ms5611/test.esp32-c3.yaml b/tests/components/ms5611/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ms5611/test.esp32-c3.yaml
rename to tests/components/ms5611/test.esp32-c3-ard.yaml
diff --git a/tests/components/ms5611/test.esp8266.yaml b/tests/components/ms5611/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ms5611/test.esp8266.yaml
rename to tests/components/ms5611/test.esp8266-ard.yaml
diff --git a/tests/components/ms5611/test.rp2040.yaml b/tests/components/ms5611/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ms5611/test.rp2040.yaml
rename to tests/components/ms5611/test.rp2040-ard.yaml
diff --git a/tests/components/mdns/test.esp32-c3-idf.yaml b/tests/components/my9231/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mdns/test.esp32-c3-idf.yaml
rename to tests/components/my9231/test.esp32-ard.yaml
diff --git a/tests/components/mdns/test.esp32-c3.yaml b/tests/components/my9231/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mdns/test.esp32-c3.yaml
rename to tests/components/my9231/test.esp32-c3-ard.yaml
diff --git a/tests/components/mdns/test.esp32.yaml b/tests/components/my9231/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mdns/test.esp32.yaml
rename to tests/components/my9231/test.esp8266-ard.yaml
diff --git a/tests/components/mdns/test.esp8266.yaml b/tests/components/my9231/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mdns/test.esp8266.yaml
rename to tests/components/my9231/test.rp2040-ard.yaml
diff --git a/tests/components/neopixelbus/test.esp32.yaml b/tests/components/neopixelbus/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/neopixelbus/test.esp32.yaml
rename to tests/components/neopixelbus/test.esp32-ard.yaml
diff --git a/tests/components/neopixelbus/test.esp32-c3.yaml b/tests/components/neopixelbus/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/neopixelbus/test.esp32-c3.yaml
rename to tests/components/neopixelbus/test.esp32-c3-ard.yaml
diff --git a/tests/components/neopixelbus/test.esp8266.yaml b/tests/components/neopixelbus/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/neopixelbus/test.esp8266.yaml
rename to tests/components/neopixelbus/test.esp8266-ard.yaml
diff --git a/tests/components/network/common.yaml b/tests/components/network/common.yaml
index 147afd1e81..dca00cbeb6 100644
--- a/tests/components/network/common.yaml
+++ b/tests/components/network/common.yaml
@@ -1,6 +1,9 @@
+substitutions:
+  network_enable_ipv6: "false"
+
 wifi:
   ssid: MySSID
   password: password1
 
 network:
-  enable_ipv6: true
+  enable_ipv6: ${network_enable_ipv6}
diff --git a/tests/components/network/test-ipv6.esp32-ard.yaml b/tests/components/network/test-ipv6.esp32-ard.yaml
new file mode 100644
index 0000000000..da1324b17e
--- /dev/null
+++ b/tests/components/network/test-ipv6.esp32-ard.yaml
@@ -0,0 +1,4 @@
+substitutions:
+  network_enable_ipv6: "true"
+
+<<: !include common.yaml
diff --git a/tests/components/network/test-ipv6.esp32-c3-ard.yaml b/tests/components/network/test-ipv6.esp32-c3-ard.yaml
new file mode 100644
index 0000000000..da1324b17e
--- /dev/null
+++ b/tests/components/network/test-ipv6.esp32-c3-ard.yaml
@@ -0,0 +1,4 @@
+substitutions:
+  network_enable_ipv6: "true"
+
+<<: !include common.yaml
diff --git a/tests/components/network/test-ipv6.esp32-c3-idf.yaml b/tests/components/network/test-ipv6.esp32-c3-idf.yaml
new file mode 100644
index 0000000000..da1324b17e
--- /dev/null
+++ b/tests/components/network/test-ipv6.esp32-c3-idf.yaml
@@ -0,0 +1,4 @@
+substitutions:
+  network_enable_ipv6: "true"
+
+<<: !include common.yaml
diff --git a/tests/components/network/test-ipv6.esp32-idf.yaml b/tests/components/network/test-ipv6.esp32-idf.yaml
new file mode 100644
index 0000000000..da1324b17e
--- /dev/null
+++ b/tests/components/network/test-ipv6.esp32-idf.yaml
@@ -0,0 +1,4 @@
+substitutions:
+  network_enable_ipv6: "true"
+
+<<: !include common.yaml
diff --git a/tests/components/network/test-ipv6.esp8266-ard.yaml b/tests/components/network/test-ipv6.esp8266-ard.yaml
new file mode 100644
index 0000000000..da1324b17e
--- /dev/null
+++ b/tests/components/network/test-ipv6.esp8266-ard.yaml
@@ -0,0 +1,4 @@
+substitutions:
+  network_enable_ipv6: "true"
+
+<<: !include common.yaml
diff --git a/tests/components/network/test-ipv6.rp2040-ard.yaml b/tests/components/network/test-ipv6.rp2040-ard.yaml
new file mode 100644
index 0000000000..da1324b17e
--- /dev/null
+++ b/tests/components/network/test-ipv6.rp2040-ard.yaml
@@ -0,0 +1,4 @@
+substitutions:
+  network_enable_ipv6: "true"
+
+<<: !include common.yaml
diff --git a/tests/components/mdns/test.rp2040.yaml b/tests/components/network/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mdns/test.rp2040.yaml
rename to tests/components/network/test.esp32-ard.yaml
diff --git a/tests/components/media_player/test.esp32.yaml b/tests/components/network/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/media_player/test.esp32.yaml
rename to tests/components/network/test.esp32-c3-ard.yaml
diff --git a/tests/components/midea_ir/test.esp32-c3.yaml b/tests/components/network/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/midea_ir/test.esp32-c3.yaml
rename to tests/components/network/test.esp8266-ard.yaml
diff --git a/tests/components/network/test.host.yaml b/tests/components/network/test.host.yaml
new file mode 100644
index 0000000000..61889b0361
--- /dev/null
+++ b/tests/components/network/test.host.yaml
@@ -0,0 +1 @@
+network:
diff --git a/tests/components/midea_ir/test.esp32.yaml b/tests/components/network/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/midea_ir/test.esp32.yaml
rename to tests/components/network/test.rp2040-ard.yaml
diff --git a/tests/components/nextion/test.esp32.yaml b/tests/components/nextion/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/nextion/test.esp32.yaml
rename to tests/components/nextion/test.esp32-ard.yaml
diff --git a/tests/components/nextion/test.esp32-c3.yaml b/tests/components/nextion/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/nextion/test.esp32-c3.yaml
rename to tests/components/nextion/test.esp32-c3-ard.yaml
diff --git a/tests/components/nextion/test.esp8266.yaml b/tests/components/nextion/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/nextion/test.esp8266.yaml
rename to tests/components/nextion/test.esp8266-ard.yaml
diff --git a/tests/components/nextion/test.rp2040.yaml b/tests/components/nextion/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/nextion/test.rp2040.yaml
rename to tests/components/nextion/test.rp2040-ard.yaml
diff --git a/tests/components/midea_ir/test.esp8266.yaml b/tests/components/noblex/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/midea_ir/test.esp8266.yaml
rename to tests/components/noblex/test.esp32-ard.yaml
diff --git a/tests/components/mitsubishi/test.esp32-c3.yaml b/tests/components/noblex/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mitsubishi/test.esp32-c3.yaml
rename to tests/components/noblex/test.esp32-c3-ard.yaml
diff --git a/tests/components/mitsubishi/test.esp32.yaml b/tests/components/noblex/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mitsubishi/test.esp32.yaml
rename to tests/components/noblex/test.esp8266-ard.yaml
diff --git a/tests/components/ntc/test.esp32.yaml b/tests/components/ntc/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ntc/test.esp32.yaml
rename to tests/components/ntc/test.esp32-ard.yaml
diff --git a/tests/components/ntc/test.esp32-c3.yaml b/tests/components/ntc/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ntc/test.esp32-c3.yaml
rename to tests/components/ntc/test.esp32-c3-ard.yaml
diff --git a/tests/components/ntc/test.esp32-s2.yaml b/tests/components/ntc/test.esp32-s2-ard.yaml
similarity index 100%
rename from tests/components/ntc/test.esp32-s2.yaml
rename to tests/components/ntc/test.esp32-s2-ard.yaml
diff --git a/tests/components/ntc/test.esp32-s3.yaml b/tests/components/ntc/test.esp32-s3-ard.yaml
similarity index 100%
rename from tests/components/ntc/test.esp32-s3.yaml
rename to tests/components/ntc/test.esp32-s3-ard.yaml
diff --git a/tests/components/ntc/test.esp8266.yaml b/tests/components/ntc/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ntc/test.esp8266.yaml
rename to tests/components/ntc/test.esp8266-ard.yaml
diff --git a/tests/components/ntc/test.rp2040.yaml b/tests/components/ntc/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ntc/test.rp2040.yaml
rename to tests/components/ntc/test.rp2040-ard.yaml
diff --git a/tests/components/mitsubishi/test.esp8266.yaml b/tests/components/ota/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mitsubishi/test.esp8266.yaml
rename to tests/components/ota/test.esp32-ard.yaml
diff --git a/tests/components/mopeka_ble/test.esp32-c3.yaml b/tests/components/ota/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mopeka_ble/test.esp32-c3.yaml
rename to tests/components/ota/test.esp32-c3-ard.yaml
diff --git a/tests/components/mopeka_ble/test.esp32.yaml b/tests/components/ota/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mopeka_ble/test.esp32.yaml
rename to tests/components/ota/test.esp8266-ard.yaml
diff --git a/tests/components/mopeka_pro_check/test.esp32-c3.yaml b/tests/components/ota/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/mopeka_pro_check/test.esp32-c3.yaml
rename to tests/components/ota/test.rp2040-ard.yaml
diff --git a/tests/components/output/test.esp32.yaml b/tests/components/output/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/output/test.esp32.yaml
rename to tests/components/output/test.esp32-ard.yaml
diff --git a/tests/components/output/test.esp32-c3.yaml b/tests/components/output/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/output/test.esp32-c3.yaml
rename to tests/components/output/test.esp32-c3-ard.yaml
diff --git a/tests/components/output/test.esp8266.yaml b/tests/components/output/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/output/test.esp8266.yaml
rename to tests/components/output/test.esp8266-ard.yaml
diff --git a/tests/components/output/test.rp2040.yaml b/tests/components/output/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/output/test.rp2040.yaml
rename to tests/components/output/test.rp2040-ard.yaml
diff --git a/tests/components/partition/test.esp32.yaml b/tests/components/partition/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/partition/test.esp32.yaml
rename to tests/components/partition/test.esp32-ard.yaml
diff --git a/tests/components/partition/test.esp32-c3.yaml b/tests/components/partition/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/partition/test.esp32-c3.yaml
rename to tests/components/partition/test.esp32-c3-ard.yaml
diff --git a/tests/components/pca6416a/test.esp32.yaml b/tests/components/pca6416a/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pca6416a/test.esp32.yaml
rename to tests/components/pca6416a/test.esp32-ard.yaml
diff --git a/tests/components/pca6416a/test.esp32-c3.yaml b/tests/components/pca6416a/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pca6416a/test.esp32-c3.yaml
rename to tests/components/pca6416a/test.esp32-c3-ard.yaml
diff --git a/tests/components/pca6416a/test.esp8266.yaml b/tests/components/pca6416a/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pca6416a/test.esp8266.yaml
rename to tests/components/pca6416a/test.esp8266-ard.yaml
diff --git a/tests/components/pca6416a/test.rp2040.yaml b/tests/components/pca6416a/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pca6416a/test.rp2040.yaml
rename to tests/components/pca6416a/test.rp2040-ard.yaml
diff --git a/tests/components/pca9554/test.esp32.yaml b/tests/components/pca9554/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pca9554/test.esp32.yaml
rename to tests/components/pca9554/test.esp32-ard.yaml
diff --git a/tests/components/pca9554/test.esp32-c3.yaml b/tests/components/pca9554/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pca9554/test.esp32-c3.yaml
rename to tests/components/pca9554/test.esp32-c3-ard.yaml
diff --git a/tests/components/pca9554/test.esp8266.yaml b/tests/components/pca9554/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pca9554/test.esp8266.yaml
rename to tests/components/pca9554/test.esp8266-ard.yaml
diff --git a/tests/components/pca9554/test.rp2040.yaml b/tests/components/pca9554/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pca9554/test.rp2040.yaml
rename to tests/components/pca9554/test.rp2040-ard.yaml
diff --git a/tests/components/pca9685/test.esp32.yaml b/tests/components/pca9685/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pca9685/test.esp32.yaml
rename to tests/components/pca9685/test.esp32-ard.yaml
diff --git a/tests/components/pca9685/test.esp32-c3.yaml b/tests/components/pca9685/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pca9685/test.esp32-c3.yaml
rename to tests/components/pca9685/test.esp32-c3-ard.yaml
diff --git a/tests/components/pca9685/test.esp8266.yaml b/tests/components/pca9685/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pca9685/test.esp8266.yaml
rename to tests/components/pca9685/test.esp8266-ard.yaml
diff --git a/tests/components/pca9685/test.rp2040.yaml b/tests/components/pca9685/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pca9685/test.rp2040.yaml
rename to tests/components/pca9685/test.rp2040-ard.yaml
diff --git a/tests/components/pcd8544/test.esp32.yaml b/tests/components/pcd8544/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pcd8544/test.esp32.yaml
rename to tests/components/pcd8544/test.esp32-ard.yaml
diff --git a/tests/components/pcd8544/test.esp32-c3.yaml b/tests/components/pcd8544/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pcd8544/test.esp32-c3.yaml
rename to tests/components/pcd8544/test.esp32-c3-ard.yaml
diff --git a/tests/components/pcd8544/test.esp8266.yaml b/tests/components/pcd8544/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pcd8544/test.esp8266.yaml
rename to tests/components/pcd8544/test.esp8266-ard.yaml
diff --git a/tests/components/pcd8544/test.rp2040.yaml b/tests/components/pcd8544/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pcd8544/test.rp2040.yaml
rename to tests/components/pcd8544/test.rp2040-ard.yaml
diff --git a/tests/components/pcf85063/test.esp32.yaml b/tests/components/pcf85063/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pcf85063/test.esp32.yaml
rename to tests/components/pcf85063/test.esp32-ard.yaml
diff --git a/tests/components/pcf85063/test.esp32-c3.yaml b/tests/components/pcf85063/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pcf85063/test.esp32-c3.yaml
rename to tests/components/pcf85063/test.esp32-c3-ard.yaml
diff --git a/tests/components/pcf85063/test.esp8266.yaml b/tests/components/pcf85063/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pcf85063/test.esp8266.yaml
rename to tests/components/pcf85063/test.esp8266-ard.yaml
diff --git a/tests/components/pcf85063/test.rp2040.yaml b/tests/components/pcf85063/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pcf85063/test.rp2040.yaml
rename to tests/components/pcf85063/test.rp2040-ard.yaml
diff --git a/tests/components/pcf8563/test.esp32.yaml b/tests/components/pcf8563/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pcf8563/test.esp32.yaml
rename to tests/components/pcf8563/test.esp32-ard.yaml
diff --git a/tests/components/pcf8563/test.esp32-c3.yaml b/tests/components/pcf8563/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pcf8563/test.esp32-c3.yaml
rename to tests/components/pcf8563/test.esp32-c3-ard.yaml
diff --git a/tests/components/pcf8563/test.esp8266.yaml b/tests/components/pcf8563/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pcf8563/test.esp8266.yaml
rename to tests/components/pcf8563/test.esp8266-ard.yaml
diff --git a/tests/components/pcf8563/test.rp2040.yaml b/tests/components/pcf8563/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pcf8563/test.rp2040.yaml
rename to tests/components/pcf8563/test.rp2040-ard.yaml
diff --git a/tests/components/pcf8574/test.esp32.yaml b/tests/components/pcf8574/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pcf8574/test.esp32.yaml
rename to tests/components/pcf8574/test.esp32-ard.yaml
diff --git a/tests/components/pcf8574/test.esp32-c3.yaml b/tests/components/pcf8574/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pcf8574/test.esp32-c3.yaml
rename to tests/components/pcf8574/test.esp32-c3-ard.yaml
diff --git a/tests/components/pcf8574/test.esp8266.yaml b/tests/components/pcf8574/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pcf8574/test.esp8266.yaml
rename to tests/components/pcf8574/test.esp8266-ard.yaml
diff --git a/tests/components/pcf8574/test.rp2040.yaml b/tests/components/pcf8574/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pcf8574/test.rp2040.yaml
rename to tests/components/pcf8574/test.rp2040-ard.yaml
diff --git a/tests/components/mopeka_pro_check/test.esp32.yaml b/tests/components/pid/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/mopeka_pro_check/test.esp32.yaml
rename to tests/components/pid/test.esp32-ard.yaml
diff --git a/tests/components/mopeka_std_check/test.esp32-c3.yaml b/tests/components/pid/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/mopeka_std_check/test.esp32-c3.yaml
rename to tests/components/pid/test.esp32-c3-ard.yaml
diff --git a/tests/components/mopeka_std_check/test.esp32.yaml b/tests/components/pid/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/mopeka_std_check/test.esp32.yaml
rename to tests/components/pid/test.esp8266-ard.yaml
diff --git a/tests/components/my9231/test.esp32-c3.yaml b/tests/components/pid/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/my9231/test.esp32-c3.yaml
rename to tests/components/pid/test.rp2040-ard.yaml
diff --git a/tests/components/pipsolar/test.esp32.yaml b/tests/components/pipsolar/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pipsolar/test.esp32.yaml
rename to tests/components/pipsolar/test.esp32-ard.yaml
diff --git a/tests/components/pipsolar/test.esp32-c3.yaml b/tests/components/pipsolar/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pipsolar/test.esp32-c3.yaml
rename to tests/components/pipsolar/test.esp32-c3-ard.yaml
diff --git a/tests/components/pipsolar/test.esp8266.yaml b/tests/components/pipsolar/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pipsolar/test.esp8266.yaml
rename to tests/components/pipsolar/test.esp8266-ard.yaml
diff --git a/tests/components/pipsolar/test.rp2040.yaml b/tests/components/pipsolar/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pipsolar/test.rp2040.yaml
rename to tests/components/pipsolar/test.rp2040-ard.yaml
diff --git a/tests/components/pm1006/test.esp32.yaml b/tests/components/pm1006/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pm1006/test.esp32.yaml
rename to tests/components/pm1006/test.esp32-ard.yaml
diff --git a/tests/components/pm1006/test.esp32-c3.yaml b/tests/components/pm1006/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pm1006/test.esp32-c3.yaml
rename to tests/components/pm1006/test.esp32-c3-ard.yaml
diff --git a/tests/components/pm1006/test.esp8266.yaml b/tests/components/pm1006/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pm1006/test.esp8266.yaml
rename to tests/components/pm1006/test.esp8266-ard.yaml
diff --git a/tests/components/pm1006/test.rp2040.yaml b/tests/components/pm1006/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pm1006/test.rp2040.yaml
rename to tests/components/pm1006/test.rp2040-ard.yaml
diff --git a/tests/components/pmsa003i/test.esp32.yaml b/tests/components/pmsa003i/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pmsa003i/test.esp32.yaml
rename to tests/components/pmsa003i/test.esp32-ard.yaml
diff --git a/tests/components/pmsa003i/test.esp32-c3.yaml b/tests/components/pmsa003i/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pmsa003i/test.esp32-c3.yaml
rename to tests/components/pmsa003i/test.esp32-c3-ard.yaml
diff --git a/tests/components/pmsa003i/test.esp8266.yaml b/tests/components/pmsa003i/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pmsa003i/test.esp8266.yaml
rename to tests/components/pmsa003i/test.esp8266-ard.yaml
diff --git a/tests/components/pmsa003i/test.rp2040.yaml b/tests/components/pmsa003i/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pmsa003i/test.rp2040.yaml
rename to tests/components/pmsa003i/test.rp2040-ard.yaml
diff --git a/tests/components/pmsx003/test.esp32.yaml b/tests/components/pmsx003/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pmsx003/test.esp32.yaml
rename to tests/components/pmsx003/test.esp32-ard.yaml
diff --git a/tests/components/pmsx003/test.esp32-c3.yaml b/tests/components/pmsx003/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pmsx003/test.esp32-c3.yaml
rename to tests/components/pmsx003/test.esp32-c3-ard.yaml
diff --git a/tests/components/pmsx003/test.esp8266.yaml b/tests/components/pmsx003/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pmsx003/test.esp8266.yaml
rename to tests/components/pmsx003/test.esp8266-ard.yaml
diff --git a/tests/components/pmsx003/test.rp2040.yaml b/tests/components/pmsx003/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pmsx003/test.rp2040.yaml
rename to tests/components/pmsx003/test.rp2040-ard.yaml
diff --git a/tests/components/pmwcs3/test.esp32.yaml b/tests/components/pmwcs3/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pmwcs3/test.esp32.yaml
rename to tests/components/pmwcs3/test.esp32-ard.yaml
diff --git a/tests/components/pmwcs3/test.esp32-c3.yaml b/tests/components/pmwcs3/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pmwcs3/test.esp32-c3.yaml
rename to tests/components/pmwcs3/test.esp32-c3-ard.yaml
diff --git a/tests/components/pmwcs3/test.esp8266.yaml b/tests/components/pmwcs3/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pmwcs3/test.esp8266.yaml
rename to tests/components/pmwcs3/test.esp8266-ard.yaml
diff --git a/tests/components/pmwcs3/test.rp2040.yaml b/tests/components/pmwcs3/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pmwcs3/test.rp2040.yaml
rename to tests/components/pmwcs3/test.rp2040-ard.yaml
diff --git a/tests/components/pn532_i2c/test.esp32.yaml b/tests/components/pn532_i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pn532_i2c/test.esp32.yaml
rename to tests/components/pn532_i2c/test.esp32-ard.yaml
diff --git a/tests/components/pn532_i2c/test.esp32-c3.yaml b/tests/components/pn532_i2c/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pn532_i2c/test.esp32-c3.yaml
rename to tests/components/pn532_i2c/test.esp32-c3-ard.yaml
diff --git a/tests/components/pn532_i2c/test.esp8266.yaml b/tests/components/pn532_i2c/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pn532_i2c/test.esp8266.yaml
rename to tests/components/pn532_i2c/test.esp8266-ard.yaml
diff --git a/tests/components/pn532_i2c/test.rp2040.yaml b/tests/components/pn532_i2c/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pn532_i2c/test.rp2040.yaml
rename to tests/components/pn532_i2c/test.rp2040-ard.yaml
diff --git a/tests/components/pn532_spi/test.esp32.yaml b/tests/components/pn532_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pn532_spi/test.esp32.yaml
rename to tests/components/pn532_spi/test.esp32-ard.yaml
diff --git a/tests/components/pn532_spi/test.esp32-c3.yaml b/tests/components/pn532_spi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pn532_spi/test.esp32-c3.yaml
rename to tests/components/pn532_spi/test.esp32-c3-ard.yaml
diff --git a/tests/components/pn532_spi/test.esp8266.yaml b/tests/components/pn532_spi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pn532_spi/test.esp8266.yaml
rename to tests/components/pn532_spi/test.esp8266-ard.yaml
diff --git a/tests/components/pn532_spi/test.rp2040.yaml b/tests/components/pn532_spi/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pn532_spi/test.rp2040.yaml
rename to tests/components/pn532_spi/test.rp2040-ard.yaml
diff --git a/tests/components/pn7150_i2c/test.esp32.yaml b/tests/components/pn7150_i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pn7150_i2c/test.esp32.yaml
rename to tests/components/pn7150_i2c/test.esp32-ard.yaml
diff --git a/tests/components/pn7150_i2c/test.esp32-c3.yaml b/tests/components/pn7150_i2c/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pn7150_i2c/test.esp32-c3.yaml
rename to tests/components/pn7150_i2c/test.esp32-c3-ard.yaml
diff --git a/tests/components/pn7150_i2c/test.esp8266.yaml b/tests/components/pn7150_i2c/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pn7150_i2c/test.esp8266.yaml
rename to tests/components/pn7150_i2c/test.esp8266-ard.yaml
diff --git a/tests/components/pn7150_i2c/test.rp2040.yaml b/tests/components/pn7150_i2c/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pn7150_i2c/test.rp2040.yaml
rename to tests/components/pn7150_i2c/test.rp2040-ard.yaml
diff --git a/tests/components/pn7160_i2c/test.esp32.yaml b/tests/components/pn7160_i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pn7160_i2c/test.esp32.yaml
rename to tests/components/pn7160_i2c/test.esp32-ard.yaml
diff --git a/tests/components/pn7160_i2c/test.esp32-c3.yaml b/tests/components/pn7160_i2c/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pn7160_i2c/test.esp32-c3.yaml
rename to tests/components/pn7160_i2c/test.esp32-c3-ard.yaml
diff --git a/tests/components/pn7160_i2c/test.esp8266.yaml b/tests/components/pn7160_i2c/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pn7160_i2c/test.esp8266.yaml
rename to tests/components/pn7160_i2c/test.esp8266-ard.yaml
diff --git a/tests/components/pn7160_i2c/test.rp2040.yaml b/tests/components/pn7160_i2c/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pn7160_i2c/test.rp2040.yaml
rename to tests/components/pn7160_i2c/test.rp2040-ard.yaml
diff --git a/tests/components/pn7160_spi/test.esp32.yaml b/tests/components/pn7160_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pn7160_spi/test.esp32.yaml
rename to tests/components/pn7160_spi/test.esp32-ard.yaml
diff --git a/tests/components/pn7160_spi/test.esp32-c3.yaml b/tests/components/pn7160_spi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pn7160_spi/test.esp32-c3.yaml
rename to tests/components/pn7160_spi/test.esp32-c3-ard.yaml
diff --git a/tests/components/pn7160_spi/test.esp8266.yaml b/tests/components/pn7160_spi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pn7160_spi/test.esp8266.yaml
rename to tests/components/pn7160_spi/test.esp8266-ard.yaml
diff --git a/tests/components/pn7160_spi/test.rp2040.yaml b/tests/components/pn7160_spi/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pn7160_spi/test.rp2040.yaml
rename to tests/components/pn7160_spi/test.rp2040-ard.yaml
diff --git a/tests/components/my9231/test.esp32.yaml b/tests/components/power_supply/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/my9231/test.esp32.yaml
rename to tests/components/power_supply/test.esp32-ard.yaml
diff --git a/tests/components/my9231/test.esp8266.yaml b/tests/components/power_supply/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/my9231/test.esp8266.yaml
rename to tests/components/power_supply/test.esp32-c3-ard.yaml
diff --git a/tests/components/my9231/test.rp2040.yaml b/tests/components/power_supply/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/my9231/test.rp2040.yaml
rename to tests/components/power_supply/test.esp8266-ard.yaml
diff --git a/tests/components/network/test.esp32-c3.yaml b/tests/components/power_supply/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/network/test.esp32-c3.yaml
rename to tests/components/power_supply/test.rp2040-ard.yaml
diff --git a/tests/components/network/test.esp32.yaml b/tests/components/prometheus/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/network/test.esp32.yaml
rename to tests/components/prometheus/test.esp32-ard.yaml
diff --git a/tests/components/network/test.esp8266.yaml b/tests/components/prometheus/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/network/test.esp8266.yaml
rename to tests/components/prometheus/test.esp32-c3-ard.yaml
diff --git a/tests/components/network/test.rp2040.yaml b/tests/components/prometheus/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/network/test.rp2040.yaml
rename to tests/components/prometheus/test.esp8266-ard.yaml
diff --git a/tests/components/noblex/test.esp32-c3.yaml b/tests/components/psram/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/noblex/test.esp32-c3.yaml
rename to tests/components/psram/test.esp32-ard.yaml
diff --git a/tests/components/noblex/test.esp32.yaml b/tests/components/psram/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/noblex/test.esp32.yaml
rename to tests/components/psram/test.esp32-c3-ard.yaml
diff --git a/tests/components/noblex/test.esp8266.yaml b/tests/components/pulse_counter/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/noblex/test.esp8266.yaml
rename to tests/components/pulse_counter/test.esp32-ard.yaml
diff --git a/tests/components/ota/test.esp32-c3.yaml b/tests/components/pulse_counter/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ota/test.esp32-c3.yaml
rename to tests/components/pulse_counter/test.esp32-c3-ard.yaml
diff --git a/tests/components/ota/test.esp32.yaml b/tests/components/pulse_counter/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ota/test.esp32.yaml
rename to tests/components/pulse_counter/test.esp8266-ard.yaml
diff --git a/tests/components/ota/test.esp8266.yaml b/tests/components/pulse_counter/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ota/test.esp8266.yaml
rename to tests/components/pulse_counter/test.rp2040-ard.yaml
diff --git a/tests/components/ota/test.rp2040.yaml b/tests/components/pulse_meter/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ota/test.rp2040.yaml
rename to tests/components/pulse_meter/test.esp32-ard.yaml
diff --git a/tests/components/pid/test.esp32-c3.yaml b/tests/components/pulse_meter/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pid/test.esp32-c3.yaml
rename to tests/components/pulse_meter/test.esp32-c3-ard.yaml
diff --git a/tests/components/pid/test.esp32.yaml b/tests/components/pulse_meter/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pid/test.esp32.yaml
rename to tests/components/pulse_meter/test.esp8266-ard.yaml
diff --git a/tests/components/pid/test.esp8266.yaml b/tests/components/pulse_meter/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pid/test.esp8266.yaml
rename to tests/components/pulse_meter/test.rp2040-ard.yaml
diff --git a/tests/components/pid/test.rp2040.yaml b/tests/components/pulse_width/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pid/test.rp2040.yaml
rename to tests/components/pulse_width/test.esp32-ard.yaml
diff --git a/tests/components/power_supply/test.esp32-c3.yaml b/tests/components/pulse_width/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/power_supply/test.esp32-c3.yaml
rename to tests/components/pulse_width/test.esp32-c3-ard.yaml
diff --git a/tests/components/power_supply/test.esp32.yaml b/tests/components/pulse_width/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/power_supply/test.esp32.yaml
rename to tests/components/pulse_width/test.esp8266-ard.yaml
diff --git a/tests/components/power_supply/test.esp8266.yaml b/tests/components/pulse_width/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/power_supply/test.esp8266.yaml
rename to tests/components/pulse_width/test.rp2040-ard.yaml
diff --git a/tests/components/power_supply/test.rp2040.yaml b/tests/components/pvvx_mithermometer/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/power_supply/test.rp2040.yaml
rename to tests/components/pvvx_mithermometer/test.esp32-ard.yaml
diff --git a/tests/components/prometheus/test.esp32-c3.yaml b/tests/components/pvvx_mithermometer/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/prometheus/test.esp32-c3.yaml
rename to tests/components/pvvx_mithermometer/test.esp32-c3-ard.yaml
diff --git a/tests/components/pylontech/test.esp32.yaml b/tests/components/pylontech/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pylontech/test.esp32.yaml
rename to tests/components/pylontech/test.esp32-ard.yaml
diff --git a/tests/components/pylontech/test.esp32-c3.yaml b/tests/components/pylontech/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pylontech/test.esp32-c3.yaml
rename to tests/components/pylontech/test.esp32-c3-ard.yaml
diff --git a/tests/components/pylontech/test.esp8266.yaml b/tests/components/pylontech/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pylontech/test.esp8266.yaml
rename to tests/components/pylontech/test.esp8266-ard.yaml
diff --git a/tests/components/pylontech/test.rp2040.yaml b/tests/components/pylontech/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pylontech/test.rp2040.yaml
rename to tests/components/pylontech/test.rp2040-ard.yaml
diff --git a/tests/components/pzem004t/test.esp32.yaml b/tests/components/pzem004t/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pzem004t/test.esp32.yaml
rename to tests/components/pzem004t/test.esp32-ard.yaml
diff --git a/tests/components/pzem004t/test.esp32-c3.yaml b/tests/components/pzem004t/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pzem004t/test.esp32-c3.yaml
rename to tests/components/pzem004t/test.esp32-c3-ard.yaml
diff --git a/tests/components/pzem004t/test.esp8266.yaml b/tests/components/pzem004t/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pzem004t/test.esp8266.yaml
rename to tests/components/pzem004t/test.esp8266-ard.yaml
diff --git a/tests/components/pzem004t/test.rp2040.yaml b/tests/components/pzem004t/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pzem004t/test.rp2040.yaml
rename to tests/components/pzem004t/test.rp2040-ard.yaml
diff --git a/tests/components/pzemac/test.esp32.yaml b/tests/components/pzemac/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pzemac/test.esp32.yaml
rename to tests/components/pzemac/test.esp32-ard.yaml
diff --git a/tests/components/pzemac/test.esp32-c3.yaml b/tests/components/pzemac/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pzemac/test.esp32-c3.yaml
rename to tests/components/pzemac/test.esp32-c3-ard.yaml
diff --git a/tests/components/pzemac/test.esp8266.yaml b/tests/components/pzemac/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pzemac/test.esp8266.yaml
rename to tests/components/pzemac/test.esp8266-ard.yaml
diff --git a/tests/components/pzemac/test.rp2040.yaml b/tests/components/pzemac/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pzemac/test.rp2040.yaml
rename to tests/components/pzemac/test.rp2040-ard.yaml
diff --git a/tests/components/pzemdc/test.esp32.yaml b/tests/components/pzemdc/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pzemdc/test.esp32.yaml
rename to tests/components/pzemdc/test.esp32-ard.yaml
diff --git a/tests/components/pzemdc/test.esp32-c3.yaml b/tests/components/pzemdc/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pzemdc/test.esp32-c3.yaml
rename to tests/components/pzemdc/test.esp32-c3-ard.yaml
diff --git a/tests/components/pzemdc/test.esp8266.yaml b/tests/components/pzemdc/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pzemdc/test.esp8266.yaml
rename to tests/components/pzemdc/test.esp8266-ard.yaml
diff --git a/tests/components/pzemdc/test.rp2040.yaml b/tests/components/pzemdc/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pzemdc/test.rp2040.yaml
rename to tests/components/pzemdc/test.rp2040-ard.yaml
diff --git a/tests/components/qmc5883l/test.esp32.yaml b/tests/components/qmc5883l/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/qmc5883l/test.esp32.yaml
rename to tests/components/qmc5883l/test.esp32-ard.yaml
diff --git a/tests/components/qmc5883l/test.esp32-c3.yaml b/tests/components/qmc5883l/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/qmc5883l/test.esp32-c3.yaml
rename to tests/components/qmc5883l/test.esp32-c3-ard.yaml
diff --git a/tests/components/qmc5883l/test.esp8266.yaml b/tests/components/qmc5883l/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/qmc5883l/test.esp8266.yaml
rename to tests/components/qmc5883l/test.esp8266-ard.yaml
diff --git a/tests/components/qmc5883l/test.rp2040.yaml b/tests/components/qmc5883l/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/qmc5883l/test.rp2040.yaml
rename to tests/components/qmc5883l/test.rp2040-ard.yaml
diff --git a/tests/components/qmp6988/test.esp32.yaml b/tests/components/qmp6988/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/qmp6988/test.esp32.yaml
rename to tests/components/qmp6988/test.esp32-ard.yaml
diff --git a/tests/components/qmp6988/test.esp32-c3.yaml b/tests/components/qmp6988/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/qmp6988/test.esp32-c3.yaml
rename to tests/components/qmp6988/test.esp32-c3-ard.yaml
diff --git a/tests/components/qmp6988/test.esp8266.yaml b/tests/components/qmp6988/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/qmp6988/test.esp8266.yaml
rename to tests/components/qmp6988/test.esp8266-ard.yaml
diff --git a/tests/components/qmp6988/test.rp2040.yaml b/tests/components/qmp6988/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/qmp6988/test.rp2040.yaml
rename to tests/components/qmp6988/test.rp2040-ard.yaml
diff --git a/tests/components/qr_code/test.esp32.yaml b/tests/components/qr_code/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/qr_code/test.esp32.yaml
rename to tests/components/qr_code/test.esp32-ard.yaml
diff --git a/tests/components/qr_code/test.esp32-c3.yaml b/tests/components/qr_code/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/qr_code/test.esp32-c3.yaml
rename to tests/components/qr_code/test.esp32-c3-ard.yaml
diff --git a/tests/components/qr_code/test.esp8266.yaml b/tests/components/qr_code/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/qr_code/test.esp8266.yaml
rename to tests/components/qr_code/test.esp8266-ard.yaml
diff --git a/tests/components/qr_code/test.rp2040.yaml b/tests/components/qr_code/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/qr_code/test.rp2040.yaml
rename to tests/components/qr_code/test.rp2040-ard.yaml
diff --git a/tests/components/qwiic_pir/test.esp32.yaml b/tests/components/qwiic_pir/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/qwiic_pir/test.esp32.yaml
rename to tests/components/qwiic_pir/test.esp32-ard.yaml
diff --git a/tests/components/qwiic_pir/test.esp32-c3.yaml b/tests/components/qwiic_pir/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/qwiic_pir/test.esp32-c3.yaml
rename to tests/components/qwiic_pir/test.esp32-c3-ard.yaml
diff --git a/tests/components/qwiic_pir/test.esp8266.yaml b/tests/components/qwiic_pir/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/qwiic_pir/test.esp8266.yaml
rename to tests/components/qwiic_pir/test.esp8266-ard.yaml
diff --git a/tests/components/qwiic_pir/test.rp2040.yaml b/tests/components/qwiic_pir/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/qwiic_pir/test.rp2040.yaml
rename to tests/components/qwiic_pir/test.rp2040-ard.yaml
diff --git a/tests/components/prometheus/test.esp32.yaml b/tests/components/radon_eye_ble/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/prometheus/test.esp32.yaml
rename to tests/components/radon_eye_ble/test.esp32-ard.yaml
diff --git a/tests/components/prometheus/test.esp8266.yaml b/tests/components/radon_eye_ble/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/prometheus/test.esp8266.yaml
rename to tests/components/radon_eye_ble/test.esp32-c3-ard.yaml
diff --git a/tests/components/psram/test.esp32-c3.yaml b/tests/components/radon_eye_rd200/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/psram/test.esp32-c3.yaml
rename to tests/components/radon_eye_rd200/test.esp32-ard.yaml
diff --git a/tests/components/psram/test.esp32.yaml b/tests/components/radon_eye_rd200/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/psram/test.esp32.yaml
rename to tests/components/radon_eye_rd200/test.esp32-c3-ard.yaml
diff --git a/tests/components/rc522_i2c/test.esp32.yaml b/tests/components/rc522_i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/rc522_i2c/test.esp32.yaml
rename to tests/components/rc522_i2c/test.esp32-ard.yaml
diff --git a/tests/components/rc522_i2c/test.esp32-c3.yaml b/tests/components/rc522_i2c/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/rc522_i2c/test.esp32-c3.yaml
rename to tests/components/rc522_i2c/test.esp32-c3-ard.yaml
diff --git a/tests/components/rc522_i2c/test.esp8266.yaml b/tests/components/rc522_i2c/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/rc522_i2c/test.esp8266.yaml
rename to tests/components/rc522_i2c/test.esp8266-ard.yaml
diff --git a/tests/components/rc522_i2c/test.rp2040.yaml b/tests/components/rc522_i2c/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/rc522_i2c/test.rp2040.yaml
rename to tests/components/rc522_i2c/test.rp2040-ard.yaml
diff --git a/tests/components/rc522_spi/test.esp32.yaml b/tests/components/rc522_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/rc522_spi/test.esp32.yaml
rename to tests/components/rc522_spi/test.esp32-ard.yaml
diff --git a/tests/components/rc522_spi/test.esp32-c3.yaml b/tests/components/rc522_spi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/rc522_spi/test.esp32-c3.yaml
rename to tests/components/rc522_spi/test.esp32-c3-ard.yaml
diff --git a/tests/components/rc522_spi/test.esp8266.yaml b/tests/components/rc522_spi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/rc522_spi/test.esp8266.yaml
rename to tests/components/rc522_spi/test.esp8266-ard.yaml
diff --git a/tests/components/rc522_spi/test.rp2040.yaml b/tests/components/rc522_spi/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/rc522_spi/test.rp2040.yaml
rename to tests/components/rc522_spi/test.rp2040-ard.yaml
diff --git a/tests/components/rdm6300/test.esp32.yaml b/tests/components/rdm6300/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/rdm6300/test.esp32.yaml
rename to tests/components/rdm6300/test.esp32-ard.yaml
diff --git a/tests/components/rdm6300/test.esp32-c3.yaml b/tests/components/rdm6300/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/rdm6300/test.esp32-c3.yaml
rename to tests/components/rdm6300/test.esp32-c3-ard.yaml
diff --git a/tests/components/rdm6300/test.esp8266.yaml b/tests/components/rdm6300/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/rdm6300/test.esp8266.yaml
rename to tests/components/rdm6300/test.esp8266-ard.yaml
diff --git a/tests/components/rdm6300/test.rp2040.yaml b/tests/components/rdm6300/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/rdm6300/test.rp2040.yaml
rename to tests/components/rdm6300/test.rp2040-ard.yaml
diff --git a/tests/components/remote_receiver/test.esp32-c3.yaml b/tests/components/remote_receiver/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/remote_receiver/test.esp32-c3.yaml
rename to tests/components/remote_receiver/test.esp32-ard.yaml
diff --git a/tests/components/remote_receiver/test.esp32.yaml b/tests/components/remote_receiver/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/remote_receiver/test.esp32.yaml
rename to tests/components/remote_receiver/test.esp32-c3-ard.yaml
diff --git a/tests/components/remote_receiver/test.esp8266.yaml b/tests/components/remote_receiver/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/remote_receiver/test.esp8266.yaml
rename to tests/components/remote_receiver/test.esp8266-ard.yaml
diff --git a/tests/components/remote_transmitter/test.esp32.yaml b/tests/components/remote_transmitter/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/remote_transmitter/test.esp32.yaml
rename to tests/components/remote_transmitter/test.esp32-ard.yaml
diff --git a/tests/components/remote_transmitter/test.esp32-c3.yaml b/tests/components/remote_transmitter/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/remote_transmitter/test.esp32-c3.yaml
rename to tests/components/remote_transmitter/test.esp32-c3-ard.yaml
diff --git a/tests/components/remote_transmitter/test.esp8266.yaml b/tests/components/remote_transmitter/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/remote_transmitter/test.esp8266.yaml
rename to tests/components/remote_transmitter/test.esp8266-ard.yaml
diff --git a/tests/components/resistance/test.esp32.yaml b/tests/components/resistance/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/resistance/test.esp32.yaml
rename to tests/components/resistance/test.esp32-ard.yaml
diff --git a/tests/components/resistance/test.esp32-c3.yaml b/tests/components/resistance/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/resistance/test.esp32-c3.yaml
rename to tests/components/resistance/test.esp32-c3-ard.yaml
diff --git a/tests/components/resistance/test.esp32-s2.yaml b/tests/components/resistance/test.esp32-s2-ard.yaml
similarity index 100%
rename from tests/components/resistance/test.esp32-s2.yaml
rename to tests/components/resistance/test.esp32-s2-ard.yaml
diff --git a/tests/components/resistance/test.esp32-s3.yaml b/tests/components/resistance/test.esp32-s3-ard.yaml
similarity index 100%
rename from tests/components/resistance/test.esp32-s3.yaml
rename to tests/components/resistance/test.esp32-s3-ard.yaml
diff --git a/tests/components/resistance/test.esp8266.yaml b/tests/components/resistance/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/resistance/test.esp8266.yaml
rename to tests/components/resistance/test.esp8266-ard.yaml
diff --git a/tests/components/resistance/test.rp2040.yaml b/tests/components/resistance/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/resistance/test.rp2040.yaml
rename to tests/components/resistance/test.rp2040-ard.yaml
diff --git a/tests/components/pulse_counter/test.esp32-c3.yaml b/tests/components/restart/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pulse_counter/test.esp32-c3.yaml
rename to tests/components/restart/test.esp32-ard.yaml
diff --git a/tests/components/pulse_counter/test.esp32.yaml b/tests/components/restart/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pulse_counter/test.esp32.yaml
rename to tests/components/restart/test.esp32-c3-ard.yaml
diff --git a/tests/components/pulse_counter/test.esp8266.yaml b/tests/components/restart/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pulse_counter/test.esp8266.yaml
rename to tests/components/restart/test.esp8266-ard.yaml
diff --git a/tests/components/pulse_counter/test.rp2040.yaml b/tests/components/restart/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pulse_counter/test.rp2040.yaml
rename to tests/components/restart/test.rp2040-ard.yaml
diff --git a/tests/components/rf_bridge/test.esp32.yaml b/tests/components/rf_bridge/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/rf_bridge/test.esp32.yaml
rename to tests/components/rf_bridge/test.esp32-ard.yaml
diff --git a/tests/components/rf_bridge/test.esp32-c3.yaml b/tests/components/rf_bridge/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/rf_bridge/test.esp32-c3.yaml
rename to tests/components/rf_bridge/test.esp32-c3-ard.yaml
diff --git a/tests/components/rf_bridge/test.esp8266.yaml b/tests/components/rf_bridge/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/rf_bridge/test.esp8266.yaml
rename to tests/components/rf_bridge/test.esp8266-ard.yaml
diff --git a/tests/components/rf_bridge/test.rp2040.yaml b/tests/components/rf_bridge/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/rf_bridge/test.rp2040.yaml
rename to tests/components/rf_bridge/test.rp2040-ard.yaml
diff --git a/tests/components/rgb/test.esp32.yaml b/tests/components/rgb/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/rgb/test.esp32.yaml
rename to tests/components/rgb/test.esp32-ard.yaml
diff --git a/tests/components/rgb/test.esp32-c3.yaml b/tests/components/rgb/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/rgb/test.esp32-c3.yaml
rename to tests/components/rgb/test.esp32-c3-ard.yaml
diff --git a/tests/components/rgb/test.esp8266.yaml b/tests/components/rgb/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/rgb/test.esp8266.yaml
rename to tests/components/rgb/test.esp8266-ard.yaml
diff --git a/tests/components/rgb/test.rp2040.yaml b/tests/components/rgb/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/rgb/test.rp2040.yaml
rename to tests/components/rgb/test.rp2040-ard.yaml
diff --git a/tests/components/rgbct/test.esp32.yaml b/tests/components/rgbct/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/rgbct/test.esp32.yaml
rename to tests/components/rgbct/test.esp32-ard.yaml
diff --git a/tests/components/rgbct/test.esp32-c3.yaml b/tests/components/rgbct/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/rgbct/test.esp32-c3.yaml
rename to tests/components/rgbct/test.esp32-c3-ard.yaml
diff --git a/tests/components/rgbct/test.esp8266.yaml b/tests/components/rgbct/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/rgbct/test.esp8266.yaml
rename to tests/components/rgbct/test.esp8266-ard.yaml
diff --git a/tests/components/rgbct/test.rp2040.yaml b/tests/components/rgbct/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/rgbct/test.rp2040.yaml
rename to tests/components/rgbct/test.rp2040-ard.yaml
diff --git a/tests/components/rgbw/test.esp32.yaml b/tests/components/rgbw/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/rgbw/test.esp32.yaml
rename to tests/components/rgbw/test.esp32-ard.yaml
diff --git a/tests/components/rgbw/test.esp32-c3.yaml b/tests/components/rgbw/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/rgbw/test.esp32-c3.yaml
rename to tests/components/rgbw/test.esp32-c3-ard.yaml
diff --git a/tests/components/rgbw/test.esp8266.yaml b/tests/components/rgbw/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/rgbw/test.esp8266.yaml
rename to tests/components/rgbw/test.esp8266-ard.yaml
diff --git a/tests/components/rgbw/test.rp2040.yaml b/tests/components/rgbw/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/rgbw/test.rp2040.yaml
rename to tests/components/rgbw/test.rp2040-ard.yaml
diff --git a/tests/components/rgbww/test.esp32.yaml b/tests/components/rgbww/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/rgbww/test.esp32.yaml
rename to tests/components/rgbww/test.esp32-ard.yaml
diff --git a/tests/components/rgbww/test.esp32-c3.yaml b/tests/components/rgbww/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/rgbww/test.esp32-c3.yaml
rename to tests/components/rgbww/test.esp32-c3-ard.yaml
diff --git a/tests/components/rgbww/test.esp8266.yaml b/tests/components/rgbww/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/rgbww/test.esp8266.yaml
rename to tests/components/rgbww/test.esp8266-ard.yaml
diff --git a/tests/components/rgbww/test.rp2040.yaml b/tests/components/rgbww/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/rgbww/test.rp2040.yaml
rename to tests/components/rgbww/test.rp2040-ard.yaml
diff --git a/tests/components/rotary_encoder/test.esp32.yaml b/tests/components/rotary_encoder/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/rotary_encoder/test.esp32.yaml
rename to tests/components/rotary_encoder/test.esp32-ard.yaml
diff --git a/tests/components/rotary_encoder/test.esp32-c3.yaml b/tests/components/rotary_encoder/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/rotary_encoder/test.esp32-c3.yaml
rename to tests/components/rotary_encoder/test.esp32-c3-ard.yaml
diff --git a/tests/components/rotary_encoder/test.esp8266.yaml b/tests/components/rotary_encoder/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/rotary_encoder/test.esp8266.yaml
rename to tests/components/rotary_encoder/test.esp8266-ard.yaml
diff --git a/tests/components/rotary_encoder/test.rp2040.yaml b/tests/components/rotary_encoder/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/rotary_encoder/test.rp2040.yaml
rename to tests/components/rotary_encoder/test.rp2040-ard.yaml
diff --git a/tests/components/pulse_meter/test.esp32-c3.yaml b/tests/components/rp2040_pio_led_strip/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pulse_meter/test.esp32-c3.yaml
rename to tests/components/rp2040_pio_led_strip/test.rp2040-ard.yaml
diff --git a/tests/components/pulse_meter/test.esp32.yaml b/tests/components/rp2040_pwm/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/pulse_meter/test.esp32.yaml
rename to tests/components/rp2040_pwm/test.rp2040-ard.yaml
diff --git a/tests/components/rtttl/test.esp32.yaml b/tests/components/rtttl/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/rtttl/test.esp32.yaml
rename to tests/components/rtttl/test.esp32-ard.yaml
diff --git a/tests/components/rtttl/test.esp32-c3.yaml b/tests/components/rtttl/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/rtttl/test.esp32-c3.yaml
rename to tests/components/rtttl/test.esp32-c3-ard.yaml
diff --git a/tests/components/rtttl/test.esp8266.yaml b/tests/components/rtttl/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/rtttl/test.esp8266.yaml
rename to tests/components/rtttl/test.esp8266-ard.yaml
diff --git a/tests/components/rtttl/test.rp2040.yaml b/tests/components/rtttl/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/rtttl/test.rp2040.yaml
rename to tests/components/rtttl/test.rp2040-ard.yaml
diff --git a/tests/components/pulse_meter/test.esp8266.yaml b/tests/components/ruuvi_ble/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pulse_meter/test.esp8266.yaml
rename to tests/components/ruuvi_ble/test.esp32-ard.yaml
diff --git a/tests/components/pulse_meter/test.rp2040.yaml b/tests/components/ruuvi_ble/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pulse_meter/test.rp2040.yaml
rename to tests/components/ruuvi_ble/test.esp32-c3-ard.yaml
diff --git a/tests/components/pulse_width/test.esp32-c3.yaml b/tests/components/ruuvitag/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pulse_width/test.esp32-c3.yaml
rename to tests/components/ruuvitag/test.esp32-ard.yaml
diff --git a/tests/components/pulse_width/test.esp32.yaml b/tests/components/ruuvitag/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pulse_width/test.esp32.yaml
rename to tests/components/ruuvitag/test.esp32-c3-ard.yaml
diff --git a/tests/components/safe_mode/common.yaml b/tests/components/safe_mode/common-enabled.yaml
similarity index 100%
rename from tests/components/safe_mode/common.yaml
rename to tests/components/safe_mode/common-enabled.yaml
diff --git a/tests/components/safe_mode/test-disabled.esp32-idf.yaml b/tests/components/safe_mode/test-disabled.esp32-idf.yaml
new file mode 100644
index 0000000000..291f5a2c7c
--- /dev/null
+++ b/tests/components/safe_mode/test-disabled.esp32-idf.yaml
@@ -0,0 +1,6 @@
+wifi:
+  ssid: MySSID
+  password: password1
+
+safe_mode:
+  disabled: true
diff --git a/tests/components/safe_mode/test-enabled.esp32-ard.yaml b/tests/components/safe_mode/test-enabled.esp32-ard.yaml
new file mode 100644
index 0000000000..97fd63d70e
--- /dev/null
+++ b/tests/components/safe_mode/test-enabled.esp32-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-enabled.yaml
diff --git a/tests/components/safe_mode/test-enabled.esp32-c3-ard.yaml b/tests/components/safe_mode/test-enabled.esp32-c3-ard.yaml
new file mode 100644
index 0000000000..97fd63d70e
--- /dev/null
+++ b/tests/components/safe_mode/test-enabled.esp32-c3-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-enabled.yaml
diff --git a/tests/components/safe_mode/test-enabled.esp32-c3-idf.yaml b/tests/components/safe_mode/test-enabled.esp32-c3-idf.yaml
new file mode 100644
index 0000000000..97fd63d70e
--- /dev/null
+++ b/tests/components/safe_mode/test-enabled.esp32-c3-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-enabled.yaml
diff --git a/tests/components/safe_mode/test-enabled.esp32-idf.yaml b/tests/components/safe_mode/test-enabled.esp32-idf.yaml
new file mode 100644
index 0000000000..97fd63d70e
--- /dev/null
+++ b/tests/components/safe_mode/test-enabled.esp32-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-enabled.yaml
diff --git a/tests/components/safe_mode/test-enabled.esp8266-ard.yaml b/tests/components/safe_mode/test-enabled.esp8266-ard.yaml
new file mode 100644
index 0000000000..97fd63d70e
--- /dev/null
+++ b/tests/components/safe_mode/test-enabled.esp8266-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-enabled.yaml
diff --git a/tests/components/safe_mode/test-enabled.rp2040-ard.yaml b/tests/components/safe_mode/test-enabled.rp2040-ard.yaml
new file mode 100644
index 0000000000..97fd63d70e
--- /dev/null
+++ b/tests/components/safe_mode/test-enabled.rp2040-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-enabled.yaml
diff --git a/tests/components/scd30/test.esp32.yaml b/tests/components/scd30/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/scd30/test.esp32.yaml
rename to tests/components/scd30/test.esp32-ard.yaml
diff --git a/tests/components/scd30/test.esp32-c3.yaml b/tests/components/scd30/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/scd30/test.esp32-c3.yaml
rename to tests/components/scd30/test.esp32-c3-ard.yaml
diff --git a/tests/components/scd30/test.esp8266.yaml b/tests/components/scd30/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/scd30/test.esp8266.yaml
rename to tests/components/scd30/test.esp8266-ard.yaml
diff --git a/tests/components/scd30/test.rp2040.yaml b/tests/components/scd30/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/scd30/test.rp2040.yaml
rename to tests/components/scd30/test.rp2040-ard.yaml
diff --git a/tests/components/scd4x/test.esp32.yaml b/tests/components/scd4x/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/scd4x/test.esp32.yaml
rename to tests/components/scd4x/test.esp32-ard.yaml
diff --git a/tests/components/scd4x/test.esp32-c3.yaml b/tests/components/scd4x/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/scd4x/test.esp32-c3.yaml
rename to tests/components/scd4x/test.esp32-c3-ard.yaml
diff --git a/tests/components/scd4x/test.esp8266.yaml b/tests/components/scd4x/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/scd4x/test.esp8266.yaml
rename to tests/components/scd4x/test.esp8266-ard.yaml
diff --git a/tests/components/scd4x/test.rp2040.yaml b/tests/components/scd4x/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/scd4x/test.rp2040.yaml
rename to tests/components/scd4x/test.rp2040-ard.yaml
diff --git a/tests/components/pulse_width/test.esp8266.yaml b/tests/components/script/test.bk72xx-ard.yaml
similarity index 100%
rename from tests/components/pulse_width/test.esp8266.yaml
rename to tests/components/script/test.bk72xx-ard.yaml
diff --git a/tests/components/pulse_width/test.rp2040.yaml b/tests/components/script/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/pulse_width/test.rp2040.yaml
rename to tests/components/script/test.esp32-ard.yaml
diff --git a/tests/components/pvvx_mithermometer/test.esp32-c3.yaml b/tests/components/script/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/pvvx_mithermometer/test.esp32-c3.yaml
rename to tests/components/script/test.esp32-c3-ard.yaml
diff --git a/tests/components/pvvx_mithermometer/test.esp32.yaml b/tests/components/script/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/pvvx_mithermometer/test.esp32.yaml
rename to tests/components/script/test.esp8266-ard.yaml
diff --git a/tests/components/radon_eye_ble/test.esp32-c3.yaml b/tests/components/script/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/radon_eye_ble/test.esp32-c3.yaml
rename to tests/components/script/test.rp2040-ard.yaml
diff --git a/tests/components/sdm_meter/test.esp32.yaml b/tests/components/sdm_meter/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sdm_meter/test.esp32.yaml
rename to tests/components/sdm_meter/test.esp32-ard.yaml
diff --git a/tests/components/sdm_meter/test.esp32-c3.yaml b/tests/components/sdm_meter/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sdm_meter/test.esp32-c3.yaml
rename to tests/components/sdm_meter/test.esp32-c3-ard.yaml
diff --git a/tests/components/sdm_meter/test.esp8266.yaml b/tests/components/sdm_meter/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sdm_meter/test.esp8266.yaml
rename to tests/components/sdm_meter/test.esp8266-ard.yaml
diff --git a/tests/components/sdm_meter/test.rp2040.yaml b/tests/components/sdm_meter/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sdm_meter/test.rp2040.yaml
rename to tests/components/sdm_meter/test.rp2040-ard.yaml
diff --git a/tests/components/sdp3x/test.esp32.yaml b/tests/components/sdp3x/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sdp3x/test.esp32.yaml
rename to tests/components/sdp3x/test.esp32-ard.yaml
diff --git a/tests/components/sdp3x/test.esp32-c3.yaml b/tests/components/sdp3x/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sdp3x/test.esp32-c3.yaml
rename to tests/components/sdp3x/test.esp32-c3-ard.yaml
diff --git a/tests/components/sdp3x/test.esp8266.yaml b/tests/components/sdp3x/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sdp3x/test.esp8266.yaml
rename to tests/components/sdp3x/test.esp8266-ard.yaml
diff --git a/tests/components/sdp3x/test.rp2040.yaml b/tests/components/sdp3x/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sdp3x/test.rp2040.yaml
rename to tests/components/sdp3x/test.rp2040-ard.yaml
diff --git a/tests/components/sds011/test.esp32.yaml b/tests/components/sds011/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sds011/test.esp32.yaml
rename to tests/components/sds011/test.esp32-ard.yaml
diff --git a/tests/components/sds011/test.esp32-c3.yaml b/tests/components/sds011/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sds011/test.esp32-c3.yaml
rename to tests/components/sds011/test.esp32-c3-ard.yaml
diff --git a/tests/components/sds011/test.esp8266.yaml b/tests/components/sds011/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sds011/test.esp8266.yaml
rename to tests/components/sds011/test.esp8266-ard.yaml
diff --git a/tests/components/sds011/test.rp2040.yaml b/tests/components/sds011/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sds011/test.rp2040.yaml
rename to tests/components/sds011/test.rp2040-ard.yaml
diff --git a/tests/components/seeed_mr24hpc1/test.esp32-c3.yaml b/tests/components/seeed_mr24hpc1/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/seeed_mr24hpc1/test.esp32-c3.yaml
rename to tests/components/seeed_mr24hpc1/test.esp32-c3-ard.yaml
diff --git a/tests/components/selec_meter/test.esp32.yaml b/tests/components/selec_meter/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/selec_meter/test.esp32.yaml
rename to tests/components/selec_meter/test.esp32-ard.yaml
diff --git a/tests/components/selec_meter/test.esp32-c3.yaml b/tests/components/selec_meter/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/selec_meter/test.esp32-c3.yaml
rename to tests/components/selec_meter/test.esp32-c3-ard.yaml
diff --git a/tests/components/selec_meter/test.esp8266.yaml b/tests/components/selec_meter/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/selec_meter/test.esp8266.yaml
rename to tests/components/selec_meter/test.esp8266-ard.yaml
diff --git a/tests/components/selec_meter/test.rp2040.yaml b/tests/components/selec_meter/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/selec_meter/test.rp2040.yaml
rename to tests/components/selec_meter/test.rp2040-ard.yaml
diff --git a/tests/components/sen0321/test.esp32.yaml b/tests/components/sen0321/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sen0321/test.esp32.yaml
rename to tests/components/sen0321/test.esp32-ard.yaml
diff --git a/tests/components/sen0321/test.esp32-c3.yaml b/tests/components/sen0321/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sen0321/test.esp32-c3.yaml
rename to tests/components/sen0321/test.esp32-c3-ard.yaml
diff --git a/tests/components/sen0321/test.esp8266.yaml b/tests/components/sen0321/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sen0321/test.esp8266.yaml
rename to tests/components/sen0321/test.esp8266-ard.yaml
diff --git a/tests/components/sen0321/test.rp2040.yaml b/tests/components/sen0321/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sen0321/test.rp2040.yaml
rename to tests/components/sen0321/test.rp2040-ard.yaml
diff --git a/tests/components/sen21231/test.esp32.yaml b/tests/components/sen21231/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sen21231/test.esp32.yaml
rename to tests/components/sen21231/test.esp32-ard.yaml
diff --git a/tests/components/sen21231/test.esp32-c3.yaml b/tests/components/sen21231/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sen21231/test.esp32-c3.yaml
rename to tests/components/sen21231/test.esp32-c3-ard.yaml
diff --git a/tests/components/sen21231/test.esp8266.yaml b/tests/components/sen21231/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sen21231/test.esp8266.yaml
rename to tests/components/sen21231/test.esp8266-ard.yaml
diff --git a/tests/components/sen21231/test.rp2040.yaml b/tests/components/sen21231/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sen21231/test.rp2040.yaml
rename to tests/components/sen21231/test.rp2040-ard.yaml
diff --git a/tests/components/sen5x/test.esp32.yaml b/tests/components/sen5x/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sen5x/test.esp32.yaml
rename to tests/components/sen5x/test.esp32-ard.yaml
diff --git a/tests/components/sen5x/test.esp32-c3.yaml b/tests/components/sen5x/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sen5x/test.esp32-c3.yaml
rename to tests/components/sen5x/test.esp32-c3-ard.yaml
diff --git a/tests/components/sen5x/test.esp8266.yaml b/tests/components/sen5x/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sen5x/test.esp8266.yaml
rename to tests/components/sen5x/test.esp8266-ard.yaml
diff --git a/tests/components/sen5x/test.rp2040.yaml b/tests/components/sen5x/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sen5x/test.rp2040.yaml
rename to tests/components/sen5x/test.rp2040-ard.yaml
diff --git a/tests/components/senseair/test.esp32.yaml b/tests/components/senseair/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/senseair/test.esp32.yaml
rename to tests/components/senseair/test.esp32-ard.yaml
diff --git a/tests/components/senseair/test.esp32-c3.yaml b/tests/components/senseair/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/senseair/test.esp32-c3.yaml
rename to tests/components/senseair/test.esp32-c3-ard.yaml
diff --git a/tests/components/senseair/test.esp8266.yaml b/tests/components/senseair/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/senseair/test.esp8266.yaml
rename to tests/components/senseair/test.esp8266-ard.yaml
diff --git a/tests/components/senseair/test.rp2040.yaml b/tests/components/senseair/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/senseair/test.rp2040.yaml
rename to tests/components/senseair/test.rp2040-ard.yaml
diff --git a/tests/components/servo/test.esp32.yaml b/tests/components/servo/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/servo/test.esp32.yaml
rename to tests/components/servo/test.esp32-ard.yaml
diff --git a/tests/components/servo/test.esp32-c3.yaml b/tests/components/servo/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/servo/test.esp32-c3.yaml
rename to tests/components/servo/test.esp32-c3-ard.yaml
diff --git a/tests/components/servo/test.esp8266.yaml b/tests/components/servo/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/servo/test.esp8266.yaml
rename to tests/components/servo/test.esp8266-ard.yaml
diff --git a/tests/components/servo/test.rp2040.yaml b/tests/components/servo/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/servo/test.rp2040.yaml
rename to tests/components/servo/test.rp2040-ard.yaml
diff --git a/tests/components/sfa30/test.esp32.yaml b/tests/components/sfa30/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sfa30/test.esp32.yaml
rename to tests/components/sfa30/test.esp32-ard.yaml
diff --git a/tests/components/sfa30/test.esp32-c3.yaml b/tests/components/sfa30/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sfa30/test.esp32-c3.yaml
rename to tests/components/sfa30/test.esp32-c3-ard.yaml
diff --git a/tests/components/sfa30/test.esp8266.yaml b/tests/components/sfa30/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sfa30/test.esp8266.yaml
rename to tests/components/sfa30/test.esp8266-ard.yaml
diff --git a/tests/components/sfa30/test.rp2040.yaml b/tests/components/sfa30/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sfa30/test.rp2040.yaml
rename to tests/components/sfa30/test.rp2040-ard.yaml
diff --git a/tests/components/sgp30/test.esp32.yaml b/tests/components/sgp30/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sgp30/test.esp32.yaml
rename to tests/components/sgp30/test.esp32-ard.yaml
diff --git a/tests/components/sgp30/test.esp32-c3.yaml b/tests/components/sgp30/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sgp30/test.esp32-c3.yaml
rename to tests/components/sgp30/test.esp32-c3-ard.yaml
diff --git a/tests/components/sgp30/test.esp8266.yaml b/tests/components/sgp30/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sgp30/test.esp8266.yaml
rename to tests/components/sgp30/test.esp8266-ard.yaml
diff --git a/tests/components/sgp30/test.rp2040.yaml b/tests/components/sgp30/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sgp30/test.rp2040.yaml
rename to tests/components/sgp30/test.rp2040-ard.yaml
diff --git a/tests/components/sgp4x/test.esp32.yaml b/tests/components/sgp4x/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sgp4x/test.esp32.yaml
rename to tests/components/sgp4x/test.esp32-ard.yaml
diff --git a/tests/components/sgp4x/test.esp32-c3.yaml b/tests/components/sgp4x/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sgp4x/test.esp32-c3.yaml
rename to tests/components/sgp4x/test.esp32-c3-ard.yaml
diff --git a/tests/components/sgp4x/test.esp8266.yaml b/tests/components/sgp4x/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sgp4x/test.esp8266.yaml
rename to tests/components/sgp4x/test.esp8266-ard.yaml
diff --git a/tests/components/sgp4x/test.rp2040.yaml b/tests/components/sgp4x/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sgp4x/test.rp2040.yaml
rename to tests/components/sgp4x/test.rp2040-ard.yaml
diff --git a/tests/components/radon_eye_ble/test.esp32.yaml b/tests/components/shelly_dimmer/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/radon_eye_ble/test.esp32.yaml
rename to tests/components/shelly_dimmer/test.esp8266-ard.yaml
diff --git a/tests/components/sht3xd/test.esp32.yaml b/tests/components/sht3xd/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sht3xd/test.esp32.yaml
rename to tests/components/sht3xd/test.esp32-ard.yaml
diff --git a/tests/components/sht3xd/test.esp32-c3.yaml b/tests/components/sht3xd/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sht3xd/test.esp32-c3.yaml
rename to tests/components/sht3xd/test.esp32-c3-ard.yaml
diff --git a/tests/components/sht3xd/test.esp8266.yaml b/tests/components/sht3xd/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sht3xd/test.esp8266.yaml
rename to tests/components/sht3xd/test.esp8266-ard.yaml
diff --git a/tests/components/sht3xd/test.rp2040.yaml b/tests/components/sht3xd/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sht3xd/test.rp2040.yaml
rename to tests/components/sht3xd/test.rp2040-ard.yaml
diff --git a/tests/components/sht4x/test.esp32.yaml b/tests/components/sht4x/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sht4x/test.esp32.yaml
rename to tests/components/sht4x/test.esp32-ard.yaml
diff --git a/tests/components/sht4x/test.esp32-c3.yaml b/tests/components/sht4x/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sht4x/test.esp32-c3.yaml
rename to tests/components/sht4x/test.esp32-c3-ard.yaml
diff --git a/tests/components/sht4x/test.esp8266.yaml b/tests/components/sht4x/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sht4x/test.esp8266.yaml
rename to tests/components/sht4x/test.esp8266-ard.yaml
diff --git a/tests/components/sht4x/test.rp2040.yaml b/tests/components/sht4x/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sht4x/test.rp2040.yaml
rename to tests/components/sht4x/test.rp2040-ard.yaml
diff --git a/tests/components/shtcx/test.esp32.yaml b/tests/components/shtcx/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/shtcx/test.esp32.yaml
rename to tests/components/shtcx/test.esp32-ard.yaml
diff --git a/tests/components/shtcx/test.esp32-c3.yaml b/tests/components/shtcx/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/shtcx/test.esp32-c3.yaml
rename to tests/components/shtcx/test.esp32-c3-ard.yaml
diff --git a/tests/components/shtcx/test.esp8266.yaml b/tests/components/shtcx/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/shtcx/test.esp8266.yaml
rename to tests/components/shtcx/test.esp8266-ard.yaml
diff --git a/tests/components/shtcx/test.rp2040.yaml b/tests/components/shtcx/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/shtcx/test.rp2040.yaml
rename to tests/components/shtcx/test.rp2040-ard.yaml
diff --git a/tests/components/radon_eye_rd200/test.esp32-c3.yaml b/tests/components/shutdown/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/radon_eye_rd200/test.esp32-c3.yaml
rename to tests/components/shutdown/test.esp32-ard.yaml
diff --git a/tests/components/radon_eye_rd200/test.esp32.yaml b/tests/components/shutdown/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/radon_eye_rd200/test.esp32.yaml
rename to tests/components/shutdown/test.esp32-c3-ard.yaml
diff --git a/tests/components/restart/test.esp32-c3.yaml b/tests/components/shutdown/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/restart/test.esp32-c3.yaml
rename to tests/components/shutdown/test.esp8266-ard.yaml
diff --git a/tests/components/restart/test.esp32.yaml b/tests/components/shutdown/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/restart/test.esp32.yaml
rename to tests/components/shutdown/test.rp2040-ard.yaml
diff --git a/tests/components/restart/test.esp8266.yaml b/tests/components/sigma_delta_output/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/restart/test.esp8266.yaml
rename to tests/components/sigma_delta_output/test.esp32-ard.yaml
diff --git a/tests/components/restart/test.rp2040.yaml b/tests/components/sigma_delta_output/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/restart/test.rp2040.yaml
rename to tests/components/sigma_delta_output/test.esp32-c3-ard.yaml
diff --git a/tests/components/rp2040_pio_led_strip/test.rp2040.yaml b/tests/components/sigma_delta_output/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/rp2040_pio_led_strip/test.rp2040.yaml
rename to tests/components/sigma_delta_output/test.esp8266-ard.yaml
diff --git a/tests/components/rp2040_pwm/test.rp2040.yaml b/tests/components/sigma_delta_output/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/rp2040_pwm/test.rp2040.yaml
rename to tests/components/sigma_delta_output/test.rp2040-ard.yaml
diff --git a/tests/components/sim800l/test.esp32.yaml b/tests/components/sim800l/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sim800l/test.esp32.yaml
rename to tests/components/sim800l/test.esp32-ard.yaml
diff --git a/tests/components/sim800l/test.esp32-c3.yaml b/tests/components/sim800l/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sim800l/test.esp32-c3.yaml
rename to tests/components/sim800l/test.esp32-c3-ard.yaml
diff --git a/tests/components/sim800l/test.esp8266.yaml b/tests/components/sim800l/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sim800l/test.esp8266.yaml
rename to tests/components/sim800l/test.esp8266-ard.yaml
diff --git a/tests/components/sim800l/test.rp2040.yaml b/tests/components/sim800l/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sim800l/test.rp2040.yaml
rename to tests/components/sim800l/test.rp2040-ard.yaml
diff --git a/tests/components/ruuvi_ble/test.esp32-c3.yaml b/tests/components/slow_pwm/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ruuvi_ble/test.esp32-c3.yaml
rename to tests/components/slow_pwm/test.esp32-ard.yaml
diff --git a/tests/components/ruuvi_ble/test.esp32.yaml b/tests/components/slow_pwm/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ruuvi_ble/test.esp32.yaml
rename to tests/components/slow_pwm/test.esp32-c3-ard.yaml
diff --git a/tests/components/ruuvitag/test.esp32-c3.yaml b/tests/components/slow_pwm/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ruuvitag/test.esp32-c3.yaml
rename to tests/components/slow_pwm/test.esp8266-ard.yaml
diff --git a/tests/components/ruuvitag/test.esp32.yaml b/tests/components/slow_pwm/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ruuvitag/test.esp32.yaml
rename to tests/components/slow_pwm/test.rp2040-ard.yaml
diff --git a/tests/components/safe_mode/test.esp32-c3-idf.yaml b/tests/components/sm16716/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/safe_mode/test.esp32-c3-idf.yaml
rename to tests/components/sm16716/test.esp32-ard.yaml
diff --git a/tests/components/safe_mode/test.esp32-c3.yaml b/tests/components/sm16716/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/safe_mode/test.esp32-c3.yaml
rename to tests/components/sm16716/test.esp32-c3-ard.yaml
diff --git a/tests/components/safe_mode/test.esp32-idf.yaml b/tests/components/sm16716/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/safe_mode/test.esp32-idf.yaml
rename to tests/components/sm16716/test.esp8266-ard.yaml
diff --git a/tests/components/safe_mode/test.esp32.yaml b/tests/components/sm16716/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/safe_mode/test.esp32.yaml
rename to tests/components/sm16716/test.rp2040-ard.yaml
diff --git a/tests/components/safe_mode/test.esp8266.yaml b/tests/components/sm2135/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/safe_mode/test.esp8266.yaml
rename to tests/components/sm2135/test.esp32-ard.yaml
diff --git a/tests/components/safe_mode/test.rp2040.yaml b/tests/components/sm2135/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/safe_mode/test.rp2040.yaml
rename to tests/components/sm2135/test.esp32-c3-ard.yaml
diff --git a/tests/components/script/test.bk72xx.yaml b/tests/components/sm2135/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/script/test.bk72xx.yaml
rename to tests/components/sm2135/test.esp8266-ard.yaml
diff --git a/tests/components/script/test.esp32-c3.yaml b/tests/components/sm2135/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/script/test.esp32-c3.yaml
rename to tests/components/sm2135/test.rp2040-ard.yaml
diff --git a/tests/components/script/test.esp32.yaml b/tests/components/sm2235/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/script/test.esp32.yaml
rename to tests/components/sm2235/test.esp32-ard.yaml
diff --git a/tests/components/script/test.esp8266.yaml b/tests/components/sm2235/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/script/test.esp8266.yaml
rename to tests/components/sm2235/test.esp32-c3-ard.yaml
diff --git a/tests/components/script/test.rp2040.yaml b/tests/components/sm2235/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/script/test.rp2040.yaml
rename to tests/components/sm2235/test.esp8266-ard.yaml
diff --git a/tests/components/shelly_dimmer/test.esp8266.yaml b/tests/components/sm2235/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/shelly_dimmer/test.esp8266.yaml
rename to tests/components/sm2235/test.rp2040-ard.yaml
diff --git a/tests/components/shutdown/test.esp32-c3.yaml b/tests/components/sm2335/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/shutdown/test.esp32-c3.yaml
rename to tests/components/sm2335/test.esp32-ard.yaml
diff --git a/tests/components/shutdown/test.esp32.yaml b/tests/components/sm2335/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/shutdown/test.esp32.yaml
rename to tests/components/sm2335/test.esp32-c3-ard.yaml
diff --git a/tests/components/shutdown/test.esp8266.yaml b/tests/components/sm2335/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/shutdown/test.esp8266.yaml
rename to tests/components/sm2335/test.esp8266-ard.yaml
diff --git a/tests/components/shutdown/test.rp2040.yaml b/tests/components/sm2335/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/shutdown/test.rp2040.yaml
rename to tests/components/sm2335/test.rp2040-ard.yaml
diff --git a/tests/components/sm300d2/test.esp32.yaml b/tests/components/sm300d2/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sm300d2/test.esp32.yaml
rename to tests/components/sm300d2/test.esp32-ard.yaml
diff --git a/tests/components/sm300d2/test.esp32-c3.yaml b/tests/components/sm300d2/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sm300d2/test.esp32-c3.yaml
rename to tests/components/sm300d2/test.esp32-c3-ard.yaml
diff --git a/tests/components/sm300d2/test.esp8266.yaml b/tests/components/sm300d2/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sm300d2/test.esp8266.yaml
rename to tests/components/sm300d2/test.esp8266-ard.yaml
diff --git a/tests/components/sm300d2/test.rp2040.yaml b/tests/components/sm300d2/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sm300d2/test.rp2040.yaml
rename to tests/components/sm300d2/test.rp2040-ard.yaml
diff --git a/tests/components/sml/test.esp32.yaml b/tests/components/sml/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sml/test.esp32.yaml
rename to tests/components/sml/test.esp32-ard.yaml
diff --git a/tests/components/sml/test.esp32-c3.yaml b/tests/components/sml/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sml/test.esp32-c3.yaml
rename to tests/components/sml/test.esp32-c3-ard.yaml
diff --git a/tests/components/sml/test.esp8266.yaml b/tests/components/sml/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sml/test.esp8266.yaml
rename to tests/components/sml/test.esp8266-ard.yaml
diff --git a/tests/components/sml/test.rp2040.yaml b/tests/components/sml/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sml/test.rp2040.yaml
rename to tests/components/sml/test.rp2040-ard.yaml
diff --git a/tests/components/smt100/test.esp32.yaml b/tests/components/smt100/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/smt100/test.esp32.yaml
rename to tests/components/smt100/test.esp32-ard.yaml
diff --git a/tests/components/smt100/test.esp32-c3.yaml b/tests/components/smt100/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/smt100/test.esp32-c3.yaml
rename to tests/components/smt100/test.esp32-c3-ard.yaml
diff --git a/tests/components/smt100/test.esp8266.yaml b/tests/components/smt100/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/smt100/test.esp8266.yaml
rename to tests/components/smt100/test.esp8266-ard.yaml
diff --git a/tests/components/smt100/test.rp2040.yaml b/tests/components/smt100/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/smt100/test.rp2040.yaml
rename to tests/components/smt100/test.rp2040-ard.yaml
diff --git a/tests/components/sn74hc165/test.esp32.yaml b/tests/components/sn74hc165/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sn74hc165/test.esp32.yaml
rename to tests/components/sn74hc165/test.esp32-ard.yaml
diff --git a/tests/components/sn74hc165/test.esp32-c3.yaml b/tests/components/sn74hc165/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sn74hc165/test.esp32-c3.yaml
rename to tests/components/sn74hc165/test.esp32-c3-ard.yaml
diff --git a/tests/components/sn74hc165/test.esp8266.yaml b/tests/components/sn74hc165/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sn74hc165/test.esp8266.yaml
rename to tests/components/sn74hc165/test.esp8266-ard.yaml
diff --git a/tests/components/sn74hc165/test.rp2040.yaml b/tests/components/sn74hc165/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sn74hc165/test.rp2040.yaml
rename to tests/components/sn74hc165/test.rp2040-ard.yaml
diff --git a/tests/components/sn74hc595/test.esp32.yaml b/tests/components/sn74hc595/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sn74hc595/test.esp32.yaml
rename to tests/components/sn74hc595/test.esp32-ard.yaml
diff --git a/tests/components/sn74hc595/test.esp32-c3.yaml b/tests/components/sn74hc595/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sn74hc595/test.esp32-c3.yaml
rename to tests/components/sn74hc595/test.esp32-c3-ard.yaml
diff --git a/tests/components/sn74hc595/test.esp8266.yaml b/tests/components/sn74hc595/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sn74hc595/test.esp8266.yaml
rename to tests/components/sn74hc595/test.esp8266-ard.yaml
diff --git a/tests/components/sn74hc595/test.rp2040.yaml b/tests/components/sn74hc595/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sn74hc595/test.rp2040.yaml
rename to tests/components/sn74hc595/test.rp2040-ard.yaml
diff --git a/tests/components/sigma_delta_output/test.esp32-c3.yaml b/tests/components/sntp/test.bk72xx-ard.yaml
similarity index 100%
rename from tests/components/sigma_delta_output/test.esp32-c3.yaml
rename to tests/components/sntp/test.bk72xx-ard.yaml
diff --git a/tests/components/sigma_delta_output/test.esp32.yaml b/tests/components/sntp/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sigma_delta_output/test.esp32.yaml
rename to tests/components/sntp/test.esp32-ard.yaml
diff --git a/tests/components/sigma_delta_output/test.esp8266.yaml b/tests/components/sntp/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sigma_delta_output/test.esp8266.yaml
rename to tests/components/sntp/test.esp32-c3-ard.yaml
diff --git a/tests/components/sigma_delta_output/test.rp2040.yaml b/tests/components/sntp/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sigma_delta_output/test.rp2040.yaml
rename to tests/components/sntp/test.esp8266-ard.yaml
diff --git a/tests/components/slow_pwm/test.esp32-c3.yaml b/tests/components/sntp/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/slow_pwm/test.esp32-c3.yaml
rename to tests/components/sntp/test.rp2040-ard.yaml
diff --git a/tests/components/sonoff_d1/test.esp32.yaml b/tests/components/sonoff_d1/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sonoff_d1/test.esp32.yaml
rename to tests/components/sonoff_d1/test.esp32-ard.yaml
diff --git a/tests/components/sonoff_d1/test.esp8266.yaml b/tests/components/sonoff_d1/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sonoff_d1/test.esp8266.yaml
rename to tests/components/sonoff_d1/test.esp8266-ard.yaml
diff --git a/tests/components/speaker/test.esp32.yaml b/tests/components/speaker/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/speaker/test.esp32.yaml
rename to tests/components/speaker/test.esp32-ard.yaml
diff --git a/tests/components/speaker/test.esp32-c3.yaml b/tests/components/speaker/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/speaker/test.esp32-c3.yaml
rename to tests/components/speaker/test.esp32-c3-ard.yaml
diff --git a/tests/components/speed/test.esp32.yaml b/tests/components/speed/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/speed/test.esp32.yaml
rename to tests/components/speed/test.esp32-ard.yaml
diff --git a/tests/components/speed/test.esp32-c3.yaml b/tests/components/speed/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/speed/test.esp32-c3.yaml
rename to tests/components/speed/test.esp32-c3-ard.yaml
diff --git a/tests/components/speed/test.esp8266.yaml b/tests/components/speed/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/speed/test.esp8266.yaml
rename to tests/components/speed/test.esp8266-ard.yaml
diff --git a/tests/components/speed/test.rp2040.yaml b/tests/components/speed/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/speed/test.rp2040.yaml
rename to tests/components/speed/test.rp2040-ard.yaml
diff --git a/tests/components/spi/test.esp32.yaml b/tests/components/spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/spi/test.esp32.yaml
rename to tests/components/spi/test.esp32-ard.yaml
diff --git a/tests/components/spi/test.esp32-c3.yaml b/tests/components/spi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/spi/test.esp32-c3.yaml
rename to tests/components/spi/test.esp32-c3-ard.yaml
diff --git a/tests/components/spi/test.esp8266.yaml b/tests/components/spi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/spi/test.esp8266.yaml
rename to tests/components/spi/test.esp8266-ard.yaml
diff --git a/tests/components/spi/test.rp2040.yaml b/tests/components/spi/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/spi/test.rp2040.yaml
rename to tests/components/spi/test.rp2040-ard.yaml
diff --git a/tests/components/spi_device/test.esp32.yaml b/tests/components/spi_device/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/spi_device/test.esp32.yaml
rename to tests/components/spi_device/test.esp32-ard.yaml
diff --git a/tests/components/spi_device/test.esp32-c3.yaml b/tests/components/spi_device/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/spi_device/test.esp32-c3.yaml
rename to tests/components/spi_device/test.esp32-c3-ard.yaml
diff --git a/tests/components/spi_device/test.esp8266.yaml b/tests/components/spi_device/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/spi_device/test.esp8266.yaml
rename to tests/components/spi_device/test.esp8266-ard.yaml
diff --git a/tests/components/spi_device/test.rp2040.yaml b/tests/components/spi_device/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/spi_device/test.rp2040.yaml
rename to tests/components/spi_device/test.rp2040-ard.yaml
diff --git a/tests/components/spi_led_strip/test.esp32.yaml b/tests/components/spi_led_strip/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/spi_led_strip/test.esp32.yaml
rename to tests/components/spi_led_strip/test.esp32-ard.yaml
diff --git a/tests/components/spi_led_strip/test.esp32-c3.yaml b/tests/components/spi_led_strip/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/spi_led_strip/test.esp32-c3.yaml
rename to tests/components/spi_led_strip/test.esp32-c3-ard.yaml
diff --git a/tests/components/spi_led_strip/test.esp8266.yaml b/tests/components/spi_led_strip/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/spi_led_strip/test.esp8266.yaml
rename to tests/components/spi_led_strip/test.esp8266-ard.yaml
diff --git a/tests/components/spi_led_strip/test.rp2040.yaml b/tests/components/spi_led_strip/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/spi_led_strip/test.rp2040.yaml
rename to tests/components/spi_led_strip/test.rp2040-ard.yaml
diff --git a/tests/components/slow_pwm/test.esp32.yaml b/tests/components/sprinkler/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/slow_pwm/test.esp32.yaml
rename to tests/components/sprinkler/test.esp32-ard.yaml
diff --git a/tests/components/slow_pwm/test.esp8266.yaml b/tests/components/sprinkler/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/slow_pwm/test.esp8266.yaml
rename to tests/components/sprinkler/test.esp32-c3-ard.yaml
diff --git a/tests/components/slow_pwm/test.rp2040.yaml b/tests/components/sprinkler/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/slow_pwm/test.rp2040.yaml
rename to tests/components/sprinkler/test.esp8266-ard.yaml
diff --git a/tests/components/sm16716/test.esp32-c3.yaml b/tests/components/sprinkler/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sm16716/test.esp32-c3.yaml
rename to tests/components/sprinkler/test.rp2040-ard.yaml
diff --git a/tests/components/sps30/test.esp32.yaml b/tests/components/sps30/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sps30/test.esp32.yaml
rename to tests/components/sps30/test.esp32-ard.yaml
diff --git a/tests/components/sps30/test.esp32-c3.yaml b/tests/components/sps30/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sps30/test.esp32-c3.yaml
rename to tests/components/sps30/test.esp32-c3-ard.yaml
diff --git a/tests/components/sps30/test.esp8266.yaml b/tests/components/sps30/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sps30/test.esp8266.yaml
rename to tests/components/sps30/test.esp8266-ard.yaml
diff --git a/tests/components/sps30/test.rp2040.yaml b/tests/components/sps30/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sps30/test.rp2040.yaml
rename to tests/components/sps30/test.rp2040-ard.yaml
diff --git a/tests/components/ssd1306_i2c/test.esp32.yaml b/tests/components/ssd1306_i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ssd1306_i2c/test.esp32.yaml
rename to tests/components/ssd1306_i2c/test.esp32-ard.yaml
diff --git a/tests/components/ssd1306_i2c/test.esp32-c3.yaml b/tests/components/ssd1306_i2c/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ssd1306_i2c/test.esp32-c3.yaml
rename to tests/components/ssd1306_i2c/test.esp32-c3-ard.yaml
diff --git a/tests/components/ssd1306_i2c/test.esp8266.yaml b/tests/components/ssd1306_i2c/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ssd1306_i2c/test.esp8266.yaml
rename to tests/components/ssd1306_i2c/test.esp8266-ard.yaml
diff --git a/tests/components/ssd1306_i2c/test.rp2040.yaml b/tests/components/ssd1306_i2c/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ssd1306_i2c/test.rp2040.yaml
rename to tests/components/ssd1306_i2c/test.rp2040-ard.yaml
diff --git a/tests/components/ssd1306_spi/test.esp32.yaml b/tests/components/ssd1306_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ssd1306_spi/test.esp32.yaml
rename to tests/components/ssd1306_spi/test.esp32-ard.yaml
diff --git a/tests/components/ssd1306_spi/test.esp32-c3.yaml b/tests/components/ssd1306_spi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ssd1306_spi/test.esp32-c3.yaml
rename to tests/components/ssd1306_spi/test.esp32-c3-ard.yaml
diff --git a/tests/components/ssd1306_spi/test.esp8266.yaml b/tests/components/ssd1306_spi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ssd1306_spi/test.esp8266.yaml
rename to tests/components/ssd1306_spi/test.esp8266-ard.yaml
diff --git a/tests/components/ssd1306_spi/test.rp2040.yaml b/tests/components/ssd1306_spi/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ssd1306_spi/test.rp2040.yaml
rename to tests/components/ssd1306_spi/test.rp2040-ard.yaml
diff --git a/tests/components/ssd1322_spi/test.esp32.yaml b/tests/components/ssd1322_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ssd1322_spi/test.esp32.yaml
rename to tests/components/ssd1322_spi/test.esp32-ard.yaml
diff --git a/tests/components/ssd1322_spi/test.esp32-c3.yaml b/tests/components/ssd1322_spi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ssd1322_spi/test.esp32-c3.yaml
rename to tests/components/ssd1322_spi/test.esp32-c3-ard.yaml
diff --git a/tests/components/ssd1322_spi/test.esp8266.yaml b/tests/components/ssd1322_spi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ssd1322_spi/test.esp8266.yaml
rename to tests/components/ssd1322_spi/test.esp8266-ard.yaml
diff --git a/tests/components/ssd1322_spi/test.rp2040.yaml b/tests/components/ssd1322_spi/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ssd1322_spi/test.rp2040.yaml
rename to tests/components/ssd1322_spi/test.rp2040-ard.yaml
diff --git a/tests/components/ssd1325_spi/test.esp32.yaml b/tests/components/ssd1325_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ssd1325_spi/test.esp32.yaml
rename to tests/components/ssd1325_spi/test.esp32-ard.yaml
diff --git a/tests/components/ssd1325_spi/test.esp32-c3.yaml b/tests/components/ssd1325_spi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ssd1325_spi/test.esp32-c3.yaml
rename to tests/components/ssd1325_spi/test.esp32-c3-ard.yaml
diff --git a/tests/components/ssd1325_spi/test.esp8266.yaml b/tests/components/ssd1325_spi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ssd1325_spi/test.esp8266.yaml
rename to tests/components/ssd1325_spi/test.esp8266-ard.yaml
diff --git a/tests/components/ssd1325_spi/test.rp2040.yaml b/tests/components/ssd1325_spi/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ssd1325_spi/test.rp2040.yaml
rename to tests/components/ssd1325_spi/test.rp2040-ard.yaml
diff --git a/tests/components/ssd1327_i2c/test.esp32.yaml b/tests/components/ssd1327_i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ssd1327_i2c/test.esp32.yaml
rename to tests/components/ssd1327_i2c/test.esp32-ard.yaml
diff --git a/tests/components/ssd1327_i2c/test.esp32-c3.yaml b/tests/components/ssd1327_i2c/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ssd1327_i2c/test.esp32-c3.yaml
rename to tests/components/ssd1327_i2c/test.esp32-c3-ard.yaml
diff --git a/tests/components/ssd1327_i2c/test.esp8266.yaml b/tests/components/ssd1327_i2c/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ssd1327_i2c/test.esp8266.yaml
rename to tests/components/ssd1327_i2c/test.esp8266-ard.yaml
diff --git a/tests/components/ssd1327_i2c/test.rp2040.yaml b/tests/components/ssd1327_i2c/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ssd1327_i2c/test.rp2040.yaml
rename to tests/components/ssd1327_i2c/test.rp2040-ard.yaml
diff --git a/tests/components/ssd1327_spi/test.esp32.yaml b/tests/components/ssd1327_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ssd1327_spi/test.esp32.yaml
rename to tests/components/ssd1327_spi/test.esp32-ard.yaml
diff --git a/tests/components/ssd1327_spi/test.esp32-c3.yaml b/tests/components/ssd1327_spi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ssd1327_spi/test.esp32-c3.yaml
rename to tests/components/ssd1327_spi/test.esp32-c3-ard.yaml
diff --git a/tests/components/ssd1327_spi/test.esp8266.yaml b/tests/components/ssd1327_spi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ssd1327_spi/test.esp8266.yaml
rename to tests/components/ssd1327_spi/test.esp8266-ard.yaml
diff --git a/tests/components/ssd1327_spi/test.rp2040.yaml b/tests/components/ssd1327_spi/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ssd1327_spi/test.rp2040.yaml
rename to tests/components/ssd1327_spi/test.rp2040-ard.yaml
diff --git a/tests/components/ssd1331_spi/test.esp32.yaml b/tests/components/ssd1331_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ssd1331_spi/test.esp32.yaml
rename to tests/components/ssd1331_spi/test.esp32-ard.yaml
diff --git a/tests/components/ssd1331_spi/test.esp32-c3.yaml b/tests/components/ssd1331_spi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ssd1331_spi/test.esp32-c3.yaml
rename to tests/components/ssd1331_spi/test.esp32-c3-ard.yaml
diff --git a/tests/components/ssd1331_spi/test.esp8266.yaml b/tests/components/ssd1331_spi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ssd1331_spi/test.esp8266.yaml
rename to tests/components/ssd1331_spi/test.esp8266-ard.yaml
diff --git a/tests/components/ssd1331_spi/test.rp2040.yaml b/tests/components/ssd1331_spi/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ssd1331_spi/test.rp2040.yaml
rename to tests/components/ssd1331_spi/test.rp2040-ard.yaml
diff --git a/tests/components/ssd1351_spi/test.esp32.yaml b/tests/components/ssd1351_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ssd1351_spi/test.esp32.yaml
rename to tests/components/ssd1351_spi/test.esp32-ard.yaml
diff --git a/tests/components/ssd1351_spi/test.esp32-c3.yaml b/tests/components/ssd1351_spi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ssd1351_spi/test.esp32-c3.yaml
rename to tests/components/ssd1351_spi/test.esp32-c3-ard.yaml
diff --git a/tests/components/ssd1351_spi/test.esp8266.yaml b/tests/components/ssd1351_spi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ssd1351_spi/test.esp8266.yaml
rename to tests/components/ssd1351_spi/test.esp8266-ard.yaml
diff --git a/tests/components/ssd1351_spi/test.rp2040.yaml b/tests/components/ssd1351_spi/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ssd1351_spi/test.rp2040.yaml
rename to tests/components/ssd1351_spi/test.rp2040-ard.yaml
diff --git a/tests/components/st7567_i2c/test.esp32.yaml b/tests/components/st7567_i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/st7567_i2c/test.esp32.yaml
rename to tests/components/st7567_i2c/test.esp32-ard.yaml
diff --git a/tests/components/st7567_i2c/test.esp32-c3.yaml b/tests/components/st7567_i2c/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/st7567_i2c/test.esp32-c3.yaml
rename to tests/components/st7567_i2c/test.esp32-c3-ard.yaml
diff --git a/tests/components/st7567_i2c/test.esp8266.yaml b/tests/components/st7567_i2c/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/st7567_i2c/test.esp8266.yaml
rename to tests/components/st7567_i2c/test.esp8266-ard.yaml
diff --git a/tests/components/st7567_i2c/test.rp2040.yaml b/tests/components/st7567_i2c/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/st7567_i2c/test.rp2040.yaml
rename to tests/components/st7567_i2c/test.rp2040-ard.yaml
diff --git a/tests/components/st7567_spi/test.esp32.yaml b/tests/components/st7567_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/st7567_spi/test.esp32.yaml
rename to tests/components/st7567_spi/test.esp32-ard.yaml
diff --git a/tests/components/st7567_spi/test.esp32-c3.yaml b/tests/components/st7567_spi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/st7567_spi/test.esp32-c3.yaml
rename to tests/components/st7567_spi/test.esp32-c3-ard.yaml
diff --git a/tests/components/st7567_spi/test.esp8266.yaml b/tests/components/st7567_spi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/st7567_spi/test.esp8266.yaml
rename to tests/components/st7567_spi/test.esp8266-ard.yaml
diff --git a/tests/components/st7567_spi/test.rp2040.yaml b/tests/components/st7567_spi/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/st7567_spi/test.rp2040.yaml
rename to tests/components/st7567_spi/test.rp2040-ard.yaml
diff --git a/tests/components/st7735/test.esp32.yaml b/tests/components/st7735/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/st7735/test.esp32.yaml
rename to tests/components/st7735/test.esp32-ard.yaml
diff --git a/tests/components/st7735/test.esp32-c3.yaml b/tests/components/st7735/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/st7735/test.esp32-c3.yaml
rename to tests/components/st7735/test.esp32-c3-ard.yaml
diff --git a/tests/components/st7735/test.esp8266.yaml b/tests/components/st7735/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/st7735/test.esp8266.yaml
rename to tests/components/st7735/test.esp8266-ard.yaml
diff --git a/tests/components/st7735/test.rp2040.yaml b/tests/components/st7735/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/st7735/test.rp2040.yaml
rename to tests/components/st7735/test.rp2040-ard.yaml
diff --git a/tests/components/st7789v/test.esp32.yaml b/tests/components/st7789v/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/st7789v/test.esp32.yaml
rename to tests/components/st7789v/test.esp32-ard.yaml
diff --git a/tests/components/st7789v/test.esp32-c3.yaml b/tests/components/st7789v/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/st7789v/test.esp32-c3.yaml
rename to tests/components/st7789v/test.esp32-c3-ard.yaml
diff --git a/tests/components/st7789v/test.esp8266.yaml b/tests/components/st7789v/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/st7789v/test.esp8266.yaml
rename to tests/components/st7789v/test.esp8266-ard.yaml
diff --git a/tests/components/st7789v/test.rp2040.yaml b/tests/components/st7789v/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/st7789v/test.rp2040.yaml
rename to tests/components/st7789v/test.rp2040-ard.yaml
diff --git a/tests/components/st7920/test.esp32.yaml b/tests/components/st7920/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/st7920/test.esp32.yaml
rename to tests/components/st7920/test.esp32-ard.yaml
diff --git a/tests/components/st7920/test.esp32-c3.yaml b/tests/components/st7920/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/st7920/test.esp32-c3.yaml
rename to tests/components/st7920/test.esp32-c3-ard.yaml
diff --git a/tests/components/st7920/test.esp8266.yaml b/tests/components/st7920/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/st7920/test.esp8266.yaml
rename to tests/components/st7920/test.esp8266-ard.yaml
diff --git a/tests/components/st7920/test.rp2040.yaml b/tests/components/st7920/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/st7920/test.rp2040.yaml
rename to tests/components/st7920/test.rp2040-ard.yaml
diff --git a/tests/components/sm16716/test.esp32.yaml b/tests/components/status/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sm16716/test.esp32.yaml
rename to tests/components/status/test.esp32-ard.yaml
diff --git a/tests/components/sm16716/test.esp8266.yaml b/tests/components/status/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sm16716/test.esp8266.yaml
rename to tests/components/status/test.esp32-c3-ard.yaml
diff --git a/tests/components/sm16716/test.rp2040.yaml b/tests/components/status/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sm16716/test.rp2040.yaml
rename to tests/components/status/test.esp8266-ard.yaml
diff --git a/tests/components/sm2135/test.esp32-c3.yaml b/tests/components/status/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sm2135/test.esp32-c3.yaml
rename to tests/components/status/test.rp2040-ard.yaml
diff --git a/tests/components/sm2135/test.esp32.yaml b/tests/components/status_led/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sm2135/test.esp32.yaml
rename to tests/components/status_led/test.esp32-ard.yaml
diff --git a/tests/components/sm2135/test.esp8266.yaml b/tests/components/status_led/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sm2135/test.esp8266.yaml
rename to tests/components/status_led/test.esp32-c3-ard.yaml
diff --git a/tests/components/sm2135/test.rp2040.yaml b/tests/components/status_led/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sm2135/test.rp2040.yaml
rename to tests/components/status_led/test.esp8266-ard.yaml
diff --git a/tests/components/sm2235/test.esp32-c3.yaml b/tests/components/status_led/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sm2235/test.esp32-c3.yaml
rename to tests/components/status_led/test.rp2040-ard.yaml
diff --git a/tests/components/sm2235/test.esp32.yaml b/tests/components/stepper/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sm2235/test.esp32.yaml
rename to tests/components/stepper/test.esp32-ard.yaml
diff --git a/tests/components/sm2235/test.esp8266.yaml b/tests/components/stepper/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sm2235/test.esp8266.yaml
rename to tests/components/stepper/test.esp32-c3-ard.yaml
diff --git a/tests/components/sm2235/test.rp2040.yaml b/tests/components/stepper/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sm2235/test.rp2040.yaml
rename to tests/components/stepper/test.esp8266-ard.yaml
diff --git a/tests/components/sm2335/test.esp32-c3.yaml b/tests/components/stepper/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sm2335/test.esp32-c3.yaml
rename to tests/components/stepper/test.rp2040-ard.yaml
diff --git a/tests/components/sts3x/test.esp32.yaml b/tests/components/sts3x/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sts3x/test.esp32.yaml
rename to tests/components/sts3x/test.esp32-ard.yaml
diff --git a/tests/components/sts3x/test.esp32-c3.yaml b/tests/components/sts3x/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sts3x/test.esp32-c3.yaml
rename to tests/components/sts3x/test.esp32-c3-ard.yaml
diff --git a/tests/components/sts3x/test.esp8266.yaml b/tests/components/sts3x/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sts3x/test.esp8266.yaml
rename to tests/components/sts3x/test.esp8266-ard.yaml
diff --git a/tests/components/sts3x/test.rp2040.yaml b/tests/components/sts3x/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sts3x/test.rp2040.yaml
rename to tests/components/sts3x/test.rp2040-ard.yaml
diff --git a/tests/components/sm2335/test.esp32.yaml b/tests/components/sun/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sm2335/test.esp32.yaml
rename to tests/components/sun/test.esp32-ard.yaml
diff --git a/tests/components/sm2335/test.esp8266.yaml b/tests/components/sun/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sm2335/test.esp8266.yaml
rename to tests/components/sun/test.esp32-c3-ard.yaml
diff --git a/tests/components/sm2335/test.rp2040.yaml b/tests/components/sun/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sm2335/test.rp2040.yaml
rename to tests/components/sun/test.esp8266-ard.yaml
diff --git a/tests/components/sntp/test.bk72xx.yaml b/tests/components/sun/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sntp/test.bk72xx.yaml
rename to tests/components/sun/test.rp2040-ard.yaml
diff --git a/tests/components/sun_gtil2/test.esp32.yaml b/tests/components/sun_gtil2/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sun_gtil2/test.esp32.yaml
rename to tests/components/sun_gtil2/test.esp32-ard.yaml
diff --git a/tests/components/sun_gtil2/test.esp32-c3.yaml b/tests/components/sun_gtil2/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sun_gtil2/test.esp32-c3.yaml
rename to tests/components/sun_gtil2/test.esp32-c3-ard.yaml
diff --git a/tests/components/sun_gtil2/test.esp8266.yaml b/tests/components/sun_gtil2/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sun_gtil2/test.esp8266.yaml
rename to tests/components/sun_gtil2/test.esp8266-ard.yaml
diff --git a/tests/components/sun_gtil2/test.rp2040.yaml b/tests/components/sun_gtil2/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sun_gtil2/test.rp2040.yaml
rename to tests/components/sun_gtil2/test.rp2040-ard.yaml
diff --git a/tests/components/sx1509/test.esp32.yaml b/tests/components/sx1509/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sx1509/test.esp32.yaml
rename to tests/components/sx1509/test.esp32-ard.yaml
diff --git a/tests/components/sx1509/test.esp32-c3.yaml b/tests/components/sx1509/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sx1509/test.esp32-c3.yaml
rename to tests/components/sx1509/test.esp32-c3-ard.yaml
diff --git a/tests/components/sx1509/test.esp8266.yaml b/tests/components/sx1509/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sx1509/test.esp8266.yaml
rename to tests/components/sx1509/test.esp8266-ard.yaml
diff --git a/tests/components/sx1509/test.rp2040.yaml b/tests/components/sx1509/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sx1509/test.rp2040.yaml
rename to tests/components/sx1509/test.rp2040-ard.yaml
diff --git a/tests/components/t6615/test.esp32.yaml b/tests/components/t6615/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/t6615/test.esp32.yaml
rename to tests/components/t6615/test.esp32-ard.yaml
diff --git a/tests/components/t6615/test.esp32-c3.yaml b/tests/components/t6615/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/t6615/test.esp32-c3.yaml
rename to tests/components/t6615/test.esp32-c3-ard.yaml
diff --git a/tests/components/t6615/test.esp8266.yaml b/tests/components/t6615/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/t6615/test.esp8266.yaml
rename to tests/components/t6615/test.esp8266-ard.yaml
diff --git a/tests/components/t6615/test.rp2040.yaml b/tests/components/t6615/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/t6615/test.rp2040.yaml
rename to tests/components/t6615/test.rp2040-ard.yaml
diff --git a/tests/components/tca9548a/test.esp32.yaml b/tests/components/tca9548a/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tca9548a/test.esp32.yaml
rename to tests/components/tca9548a/test.esp32-ard.yaml
diff --git a/tests/components/tca9548a/test.esp32-c3.yaml b/tests/components/tca9548a/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tca9548a/test.esp32-c3.yaml
rename to tests/components/tca9548a/test.esp32-c3-ard.yaml
diff --git a/tests/components/tca9548a/test.esp8266.yaml b/tests/components/tca9548a/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tca9548a/test.esp8266.yaml
rename to tests/components/tca9548a/test.esp8266-ard.yaml
diff --git a/tests/components/tca9548a/test.rp2040.yaml b/tests/components/tca9548a/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/tca9548a/test.rp2040.yaml
rename to tests/components/tca9548a/test.rp2040-ard.yaml
diff --git a/tests/components/tcl112/test.esp32-c3.yaml b/tests/components/tcl112/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tcl112/test.esp32-c3.yaml
rename to tests/components/tcl112/test.esp32-ard.yaml
diff --git a/tests/components/tcl112/test.esp32.yaml b/tests/components/tcl112/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tcl112/test.esp32.yaml
rename to tests/components/tcl112/test.esp32-c3-ard.yaml
diff --git a/tests/components/tcl112/test.esp8266.yaml b/tests/components/tcl112/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tcl112/test.esp8266.yaml
rename to tests/components/tcl112/test.esp8266-ard.yaml
diff --git a/tests/components/tcs34725/test.esp32.yaml b/tests/components/tcs34725/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tcs34725/test.esp32.yaml
rename to tests/components/tcs34725/test.esp32-ard.yaml
diff --git a/tests/components/tcs34725/test.esp32-c3.yaml b/tests/components/tcs34725/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tcs34725/test.esp32-c3.yaml
rename to tests/components/tcs34725/test.esp32-c3-ard.yaml
diff --git a/tests/components/tcs34725/test.esp8266.yaml b/tests/components/tcs34725/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tcs34725/test.esp8266.yaml
rename to tests/components/tcs34725/test.esp8266-ard.yaml
diff --git a/tests/components/tcs34725/test.rp2040.yaml b/tests/components/tcs34725/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/tcs34725/test.rp2040.yaml
rename to tests/components/tcs34725/test.rp2040-ard.yaml
diff --git a/tests/components/tee501/test.esp32.yaml b/tests/components/tee501/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tee501/test.esp32.yaml
rename to tests/components/tee501/test.esp32-ard.yaml
diff --git a/tests/components/tee501/test.esp32-c3.yaml b/tests/components/tee501/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tee501/test.esp32-c3.yaml
rename to tests/components/tee501/test.esp32-c3-ard.yaml
diff --git a/tests/components/tee501/test.esp8266.yaml b/tests/components/tee501/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tee501/test.esp8266.yaml
rename to tests/components/tee501/test.esp8266-ard.yaml
diff --git a/tests/components/tee501/test.rp2040.yaml b/tests/components/tee501/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/tee501/test.rp2040.yaml
rename to tests/components/tee501/test.rp2040-ard.yaml
diff --git a/tests/components/teleinfo/test.esp32.yaml b/tests/components/teleinfo/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/teleinfo/test.esp32.yaml
rename to tests/components/teleinfo/test.esp32-ard.yaml
diff --git a/tests/components/teleinfo/test.esp32-c3.yaml b/tests/components/teleinfo/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/teleinfo/test.esp32-c3.yaml
rename to tests/components/teleinfo/test.esp32-c3-ard.yaml
diff --git a/tests/components/teleinfo/test.esp8266.yaml b/tests/components/teleinfo/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/teleinfo/test.esp8266.yaml
rename to tests/components/teleinfo/test.esp8266-ard.yaml
diff --git a/tests/components/teleinfo/test.rp2040.yaml b/tests/components/teleinfo/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/teleinfo/test.rp2040.yaml
rename to tests/components/teleinfo/test.rp2040-ard.yaml
diff --git a/tests/components/template/test.bk72xx.yaml b/tests/components/template/test.bk72xx-ard.yaml
similarity index 100%
rename from tests/components/template/test.bk72xx.yaml
rename to tests/components/template/test.bk72xx-ard.yaml
diff --git a/tests/components/template/test.esp32-c3.yaml b/tests/components/template/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/template/test.esp32-c3.yaml
rename to tests/components/template/test.esp32-ard.yaml
diff --git a/tests/components/template/test.esp32.yaml b/tests/components/template/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/template/test.esp32.yaml
rename to tests/components/template/test.esp32-c3-ard.yaml
diff --git a/tests/components/template/test.esp8266.yaml b/tests/components/template/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/template/test.esp8266.yaml
rename to tests/components/template/test.esp8266-ard.yaml
diff --git a/tests/components/template/test.rp2040.yaml b/tests/components/template/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/template/test.rp2040.yaml
rename to tests/components/template/test.rp2040-ard.yaml
diff --git a/tests/components/sntp/test.esp32-c3.yaml b/tests/components/thermostat/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sntp/test.esp32-c3.yaml
rename to tests/components/thermostat/test.esp32-ard.yaml
diff --git a/tests/components/sntp/test.esp32.yaml b/tests/components/thermostat/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sntp/test.esp32.yaml
rename to tests/components/thermostat/test.esp32-c3-ard.yaml
diff --git a/tests/components/sntp/test.esp8266.yaml b/tests/components/thermostat/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sntp/test.esp8266.yaml
rename to tests/components/thermostat/test.esp8266-ard.yaml
diff --git a/tests/components/sntp/test.rp2040.yaml b/tests/components/thermostat/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sntp/test.rp2040.yaml
rename to tests/components/thermostat/test.rp2040-ard.yaml
diff --git a/tests/components/sprinkler/test.esp32-c3.yaml b/tests/components/time/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sprinkler/test.esp32-c3.yaml
rename to tests/components/time/test.esp32-ard.yaml
diff --git a/tests/components/sprinkler/test.esp32.yaml b/tests/components/time/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sprinkler/test.esp32.yaml
rename to tests/components/time/test.esp32-c3-ard.yaml
diff --git a/tests/components/sprinkler/test.esp8266.yaml b/tests/components/time/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sprinkler/test.esp8266.yaml
rename to tests/components/time/test.esp8266-ard.yaml
diff --git a/tests/components/sprinkler/test.rp2040.yaml b/tests/components/time/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sprinkler/test.rp2040.yaml
rename to tests/components/time/test.rp2040-ard.yaml
diff --git a/tests/components/status/test.esp32-c3.yaml b/tests/components/time_based/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/status/test.esp32-c3.yaml
rename to tests/components/time_based/test.esp32-ard.yaml
diff --git a/tests/components/status/test.esp32.yaml b/tests/components/time_based/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/status/test.esp32.yaml
rename to tests/components/time_based/test.esp32-c3-ard.yaml
diff --git a/tests/components/status/test.esp8266.yaml b/tests/components/time_based/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/status/test.esp8266.yaml
rename to tests/components/time_based/test.esp8266-ard.yaml
diff --git a/tests/components/status/test.rp2040.yaml b/tests/components/time_based/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/status/test.rp2040.yaml
rename to tests/components/time_based/test.rp2040-ard.yaml
diff --git a/tests/components/tlc59208f/test.esp32.yaml b/tests/components/tlc59208f/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tlc59208f/test.esp32.yaml
rename to tests/components/tlc59208f/test.esp32-ard.yaml
diff --git a/tests/components/tlc59208f/test.esp32-c3.yaml b/tests/components/tlc59208f/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tlc59208f/test.esp32-c3.yaml
rename to tests/components/tlc59208f/test.esp32-c3-ard.yaml
diff --git a/tests/components/tlc59208f/test.esp8266.yaml b/tests/components/tlc59208f/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tlc59208f/test.esp8266.yaml
rename to tests/components/tlc59208f/test.esp8266-ard.yaml
diff --git a/tests/components/tlc59208f/test.rp2040.yaml b/tests/components/tlc59208f/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/tlc59208f/test.rp2040.yaml
rename to tests/components/tlc59208f/test.rp2040-ard.yaml
diff --git a/tests/components/tlc5947/test.esp32.yaml b/tests/components/tlc5947/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tlc5947/test.esp32.yaml
rename to tests/components/tlc5947/test.esp32-ard.yaml
diff --git a/tests/components/tlc5947/test.esp32-c3.yaml b/tests/components/tlc5947/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tlc5947/test.esp32-c3.yaml
rename to tests/components/tlc5947/test.esp32-c3-ard.yaml
diff --git a/tests/components/tlc5947/test.esp8266.yaml b/tests/components/tlc5947/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tlc5947/test.esp8266.yaml
rename to tests/components/tlc5947/test.esp8266-ard.yaml
diff --git a/tests/components/tlc5947/test.rp2040.yaml b/tests/components/tlc5947/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/tlc5947/test.rp2040.yaml
rename to tests/components/tlc5947/test.rp2040-ard.yaml
diff --git a/tests/components/tlc5971/test.esp32.yaml b/tests/components/tlc5971/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tlc5971/test.esp32.yaml
rename to tests/components/tlc5971/test.esp32-ard.yaml
diff --git a/tests/components/tlc5971/test.esp32-c3.yaml b/tests/components/tlc5971/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tlc5971/test.esp32-c3.yaml
rename to tests/components/tlc5971/test.esp32-c3-ard.yaml
diff --git a/tests/components/tlc5971/test.esp32-s2.yaml b/tests/components/tlc5971/test.esp32-s2-ard.yaml
similarity index 100%
rename from tests/components/tlc5971/test.esp32-s2.yaml
rename to tests/components/tlc5971/test.esp32-s2-ard.yaml
diff --git a/tests/components/tlc5971/test.esp8266.yaml b/tests/components/tlc5971/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tlc5971/test.esp8266.yaml
rename to tests/components/tlc5971/test.esp8266-ard.yaml
diff --git a/tests/components/tlc5971/test.rp2040.yaml b/tests/components/tlc5971/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/tlc5971/test.rp2040.yaml
rename to tests/components/tlc5971/test.rp2040-ard.yaml
diff --git a/tests/components/tm1621/test.esp32.yaml b/tests/components/tm1621/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tm1621/test.esp32.yaml
rename to tests/components/tm1621/test.esp32-ard.yaml
diff --git a/tests/components/tm1621/test.esp32-c3.yaml b/tests/components/tm1621/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tm1621/test.esp32-c3.yaml
rename to tests/components/tm1621/test.esp32-c3-ard.yaml
diff --git a/tests/components/tm1621/test.esp8266.yaml b/tests/components/tm1621/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tm1621/test.esp8266.yaml
rename to tests/components/tm1621/test.esp8266-ard.yaml
diff --git a/tests/components/tm1621/test.rp2040.yaml b/tests/components/tm1621/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/tm1621/test.rp2040.yaml
rename to tests/components/tm1621/test.rp2040-ard.yaml
diff --git a/tests/components/tm1637/test.esp32.yaml b/tests/components/tm1637/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tm1637/test.esp32.yaml
rename to tests/components/tm1637/test.esp32-ard.yaml
diff --git a/tests/components/tm1637/test.esp32-c3.yaml b/tests/components/tm1637/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tm1637/test.esp32-c3.yaml
rename to tests/components/tm1637/test.esp32-c3-ard.yaml
diff --git a/tests/components/tm1637/test.esp8266.yaml b/tests/components/tm1637/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tm1637/test.esp8266.yaml
rename to tests/components/tm1637/test.esp8266-ard.yaml
diff --git a/tests/components/tm1637/test.rp2040.yaml b/tests/components/tm1637/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/tm1637/test.rp2040.yaml
rename to tests/components/tm1637/test.rp2040-ard.yaml
diff --git a/tests/components/status_led/test.esp32-c3.yaml b/tests/components/tm1638/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/status_led/test.esp32-c3.yaml
rename to tests/components/tm1638/test.esp32-ard.yaml
diff --git a/tests/components/status_led/test.esp32.yaml b/tests/components/tm1638/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/status_led/test.esp32.yaml
rename to tests/components/tm1638/test.esp32-c3-ard.yaml
diff --git a/tests/components/status_led/test.esp8266.yaml b/tests/components/tm1638/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/status_led/test.esp8266.yaml
rename to tests/components/tm1638/test.esp8266-ard.yaml
diff --git a/tests/components/status_led/test.rp2040.yaml b/tests/components/tm1638/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/status_led/test.rp2040.yaml
rename to tests/components/tm1638/test.rp2040-ard.yaml
diff --git a/tests/components/stepper/test.esp32-c3.yaml b/tests/components/tm1651/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/stepper/test.esp32-c3.yaml
rename to tests/components/tm1651/test.esp32-ard.yaml
diff --git a/tests/components/stepper/test.esp32.yaml b/tests/components/tm1651/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/stepper/test.esp32.yaml
rename to tests/components/tm1651/test.esp32-c3-ard.yaml
diff --git a/tests/components/stepper/test.esp8266.yaml b/tests/components/tm1651/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/stepper/test.esp8266.yaml
rename to tests/components/tm1651/test.esp8266-ard.yaml
diff --git a/tests/components/stepper/test.rp2040.yaml b/tests/components/tm1651/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/stepper/test.rp2040.yaml
rename to tests/components/tm1651/test.rp2040-ard.yaml
diff --git a/tests/components/tmp102/test.esp32.yaml b/tests/components/tmp102/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tmp102/test.esp32.yaml
rename to tests/components/tmp102/test.esp32-ard.yaml
diff --git a/tests/components/tmp102/test.esp32-c3.yaml b/tests/components/tmp102/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tmp102/test.esp32-c3.yaml
rename to tests/components/tmp102/test.esp32-c3-ard.yaml
diff --git a/tests/components/tmp102/test.esp8266.yaml b/tests/components/tmp102/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tmp102/test.esp8266.yaml
rename to tests/components/tmp102/test.esp8266-ard.yaml
diff --git a/tests/components/tmp102/test.rp2040.yaml b/tests/components/tmp102/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/tmp102/test.rp2040.yaml
rename to tests/components/tmp102/test.rp2040-ard.yaml
diff --git a/tests/components/tmp1075/test.esp32.yaml b/tests/components/tmp1075/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tmp1075/test.esp32.yaml
rename to tests/components/tmp1075/test.esp32-ard.yaml
diff --git a/tests/components/tmp1075/test.esp32-c3.yaml b/tests/components/tmp1075/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tmp1075/test.esp32-c3.yaml
rename to tests/components/tmp1075/test.esp32-c3-ard.yaml
diff --git a/tests/components/tmp1075/test.esp8266.yaml b/tests/components/tmp1075/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tmp1075/test.esp8266.yaml
rename to tests/components/tmp1075/test.esp8266-ard.yaml
diff --git a/tests/components/tmp1075/test.rp2040.yaml b/tests/components/tmp1075/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/tmp1075/test.rp2040.yaml
rename to tests/components/tmp1075/test.rp2040-ard.yaml
diff --git a/tests/components/tmp117/test.esp32.yaml b/tests/components/tmp117/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tmp117/test.esp32.yaml
rename to tests/components/tmp117/test.esp32-ard.yaml
diff --git a/tests/components/tmp117/test.esp32-c3.yaml b/tests/components/tmp117/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tmp117/test.esp32-c3.yaml
rename to tests/components/tmp117/test.esp32-c3-ard.yaml
diff --git a/tests/components/tmp117/test.esp8266.yaml b/tests/components/tmp117/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tmp117/test.esp8266.yaml
rename to tests/components/tmp117/test.esp8266-ard.yaml
diff --git a/tests/components/tmp117/test.rp2040.yaml b/tests/components/tmp117/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/tmp117/test.rp2040.yaml
rename to tests/components/tmp117/test.rp2040-ard.yaml
diff --git a/tests/components/tof10120/test.esp32.yaml b/tests/components/tof10120/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tof10120/test.esp32.yaml
rename to tests/components/tof10120/test.esp32-ard.yaml
diff --git a/tests/components/tof10120/test.esp32-c3.yaml b/tests/components/tof10120/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tof10120/test.esp32-c3.yaml
rename to tests/components/tof10120/test.esp32-c3-ard.yaml
diff --git a/tests/components/tof10120/test.esp8266.yaml b/tests/components/tof10120/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tof10120/test.esp8266.yaml
rename to tests/components/tof10120/test.esp8266-ard.yaml
diff --git a/tests/components/tof10120/test.rp2040.yaml b/tests/components/tof10120/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/tof10120/test.rp2040.yaml
rename to tests/components/tof10120/test.rp2040-ard.yaml
diff --git a/tests/components/toshiba/test.esp32-c3.yaml b/tests/components/toshiba/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/toshiba/test.esp32-c3.yaml
rename to tests/components/toshiba/test.esp32-ard.yaml
diff --git a/tests/components/toshiba/test.esp32.yaml b/tests/components/toshiba/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/toshiba/test.esp32.yaml
rename to tests/components/toshiba/test.esp32-c3-ard.yaml
diff --git a/tests/components/toshiba/test.esp8266.yaml b/tests/components/toshiba/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/toshiba/test.esp8266.yaml
rename to tests/components/toshiba/test.esp8266-ard.yaml
diff --git a/tests/components/total_daily_energy/test.esp32.yaml b/tests/components/total_daily_energy/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/total_daily_energy/test.esp32.yaml
rename to tests/components/total_daily_energy/test.esp32-ard.yaml
diff --git a/tests/components/total_daily_energy/test.esp32-c3.yaml b/tests/components/total_daily_energy/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/total_daily_energy/test.esp32-c3.yaml
rename to tests/components/total_daily_energy/test.esp32-c3-ard.yaml
diff --git a/tests/components/total_daily_energy/test.esp8266.yaml b/tests/components/total_daily_energy/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/total_daily_energy/test.esp8266.yaml
rename to tests/components/total_daily_energy/test.esp8266-ard.yaml
diff --git a/tests/components/total_daily_energy/test.rp2040.yaml b/tests/components/total_daily_energy/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/total_daily_energy/test.rp2040.yaml
rename to tests/components/total_daily_energy/test.rp2040-ard.yaml
diff --git a/tests/components/tsl2561/test.esp32.yaml b/tests/components/tsl2561/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tsl2561/test.esp32.yaml
rename to tests/components/tsl2561/test.esp32-ard.yaml
diff --git a/tests/components/tsl2561/test.esp32-c3.yaml b/tests/components/tsl2561/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tsl2561/test.esp32-c3.yaml
rename to tests/components/tsl2561/test.esp32-c3-ard.yaml
diff --git a/tests/components/tsl2561/test.esp8266.yaml b/tests/components/tsl2561/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tsl2561/test.esp8266.yaml
rename to tests/components/tsl2561/test.esp8266-ard.yaml
diff --git a/tests/components/tsl2561/test.rp2040.yaml b/tests/components/tsl2561/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/tsl2561/test.rp2040.yaml
rename to tests/components/tsl2561/test.rp2040-ard.yaml
diff --git a/tests/components/tsl2591/test.esp32.yaml b/tests/components/tsl2591/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tsl2591/test.esp32.yaml
rename to tests/components/tsl2591/test.esp32-ard.yaml
diff --git a/tests/components/tsl2591/test.esp32-c3.yaml b/tests/components/tsl2591/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tsl2591/test.esp32-c3.yaml
rename to tests/components/tsl2591/test.esp32-c3-ard.yaml
diff --git a/tests/components/tsl2591/test.esp8266.yaml b/tests/components/tsl2591/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tsl2591/test.esp8266.yaml
rename to tests/components/tsl2591/test.esp8266-ard.yaml
diff --git a/tests/components/tsl2591/test.rp2040.yaml b/tests/components/tsl2591/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/tsl2591/test.rp2040.yaml
rename to tests/components/tsl2591/test.rp2040-ard.yaml
diff --git a/tests/components/tt21100/test.esp32.yaml b/tests/components/tt21100/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tt21100/test.esp32.yaml
rename to tests/components/tt21100/test.esp32-ard.yaml
diff --git a/tests/components/tt21100/test.esp32-c3.yaml b/tests/components/tt21100/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tt21100/test.esp32-c3.yaml
rename to tests/components/tt21100/test.esp32-c3-ard.yaml
diff --git a/tests/components/tt21100/test.esp32-s2.yaml b/tests/components/tt21100/test.esp32-s2-ard.yaml
similarity index 100%
rename from tests/components/tt21100/test.esp32-s2.yaml
rename to tests/components/tt21100/test.esp32-s2-ard.yaml
diff --git a/tests/components/tt21100/test.esp8266.yaml b/tests/components/tt21100/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tt21100/test.esp8266.yaml
rename to tests/components/tt21100/test.esp8266-ard.yaml
diff --git a/tests/components/tt21100/test.rp2040.yaml b/tests/components/tt21100/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/tt21100/test.rp2040.yaml
rename to tests/components/tt21100/test.rp2040-ard.yaml
diff --git a/tests/components/ttp229_bsf/test.esp32.yaml b/tests/components/ttp229_bsf/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ttp229_bsf/test.esp32.yaml
rename to tests/components/ttp229_bsf/test.esp32-ard.yaml
diff --git a/tests/components/ttp229_bsf/test.esp32-c3.yaml b/tests/components/ttp229_bsf/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ttp229_bsf/test.esp32-c3.yaml
rename to tests/components/ttp229_bsf/test.esp32-c3-ard.yaml
diff --git a/tests/components/ttp229_bsf/test.esp8266.yaml b/tests/components/ttp229_bsf/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ttp229_bsf/test.esp8266.yaml
rename to tests/components/ttp229_bsf/test.esp8266-ard.yaml
diff --git a/tests/components/ttp229_bsf/test.rp2040.yaml b/tests/components/ttp229_bsf/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ttp229_bsf/test.rp2040.yaml
rename to tests/components/ttp229_bsf/test.rp2040-ard.yaml
diff --git a/tests/components/ttp229_lsf/test.esp32.yaml b/tests/components/ttp229_lsf/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ttp229_lsf/test.esp32.yaml
rename to tests/components/ttp229_lsf/test.esp32-ard.yaml
diff --git a/tests/components/ttp229_lsf/test.esp32-c3.yaml b/tests/components/ttp229_lsf/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ttp229_lsf/test.esp32-c3.yaml
rename to tests/components/ttp229_lsf/test.esp32-c3-ard.yaml
diff --git a/tests/components/ttp229_lsf/test.esp8266.yaml b/tests/components/ttp229_lsf/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ttp229_lsf/test.esp8266.yaml
rename to tests/components/ttp229_lsf/test.esp8266-ard.yaml
diff --git a/tests/components/ttp229_lsf/test.rp2040.yaml b/tests/components/ttp229_lsf/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ttp229_lsf/test.rp2040.yaml
rename to tests/components/ttp229_lsf/test.rp2040-ard.yaml
diff --git a/tests/components/tuya/test.esp32.yaml b/tests/components/tuya/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tuya/test.esp32.yaml
rename to tests/components/tuya/test.esp32-ard.yaml
diff --git a/tests/components/tuya/test.esp32-c3.yaml b/tests/components/tuya/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tuya/test.esp32-c3.yaml
rename to tests/components/tuya/test.esp32-c3-ard.yaml
diff --git a/tests/components/tuya/test.esp8266.yaml b/tests/components/tuya/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tuya/test.esp8266.yaml
rename to tests/components/tuya/test.esp8266-ard.yaml
diff --git a/tests/components/tuya/test.rp2040.yaml b/tests/components/tuya/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/tuya/test.rp2040.yaml
rename to tests/components/tuya/test.rp2040-ard.yaml
diff --git a/tests/components/sun/test.esp32-c3.yaml b/tests/components/tx20/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/sun/test.esp32-c3.yaml
rename to tests/components/tx20/test.esp32-ard.yaml
diff --git a/tests/components/sun/test.esp32.yaml b/tests/components/tx20/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/sun/test.esp32.yaml
rename to tests/components/tx20/test.esp32-c3-ard.yaml
diff --git a/tests/components/sun/test.esp8266.yaml b/tests/components/tx20/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/sun/test.esp8266.yaml
rename to tests/components/tx20/test.esp8266-ard.yaml
diff --git a/tests/components/sun/test.rp2040.yaml b/tests/components/tx20/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/sun/test.rp2040.yaml
rename to tests/components/tx20/test.rp2040-ard.yaml
diff --git a/tests/components/uart/test-uart_max_with_usb_cdc.esp32-c3-ard.yaml b/tests/components/uart/test-uart_max_with_usb_cdc.esp32-c3-ard.yaml
new file mode 100644
index 0000000000..2a73826c51
--- /dev/null
+++ b/tests/components/uart/test-uart_max_with_usb_cdc.esp32-c3-ard.yaml
@@ -0,0 +1,30 @@
+<<: !include ../logger/common-usb_cdc.yaml
+
+esphome:
+  on_boot:
+    then:
+      - uart.write:
+          id: uart_1
+          data: 'Hello World'
+      - uart.write:
+          id: uart_1
+          data: [0x00, 0x20, 0x42]
+
+uart:
+  - id: uart_1
+    tx_pin: 4
+    rx_pin: 5
+    baud_rate: 9600
+    data_bits: 8
+    rx_buffer_size: 512
+    parity: EVEN
+    stop_bits: 2
+
+  - id: uart_2
+    tx_pin: 6
+    rx_pin: 7
+    baud_rate: 9600
+    data_bits: 8
+    rx_buffer_size: 512
+    parity: EVEN
+    stop_bits: 2
diff --git a/tests/components/uart/test-uart_max_with_usb_cdc.esp32-s2-ard.yaml b/tests/components/uart/test-uart_max_with_usb_cdc.esp32-s2-ard.yaml
new file mode 100644
index 0000000000..2a73826c51
--- /dev/null
+++ b/tests/components/uart/test-uart_max_with_usb_cdc.esp32-s2-ard.yaml
@@ -0,0 +1,30 @@
+<<: !include ../logger/common-usb_cdc.yaml
+
+esphome:
+  on_boot:
+    then:
+      - uart.write:
+          id: uart_1
+          data: 'Hello World'
+      - uart.write:
+          id: uart_1
+          data: [0x00, 0x20, 0x42]
+
+uart:
+  - id: uart_1
+    tx_pin: 4
+    rx_pin: 5
+    baud_rate: 9600
+    data_bits: 8
+    rx_buffer_size: 512
+    parity: EVEN
+    stop_bits: 2
+
+  - id: uart_2
+    tx_pin: 6
+    rx_pin: 7
+    baud_rate: 9600
+    data_bits: 8
+    rx_buffer_size: 512
+    parity: EVEN
+    stop_bits: 2
diff --git a/tests/components/uart/test-uart_max_with_usb_cdc.esp32-s2-idf.yaml b/tests/components/uart/test-uart_max_with_usb_cdc.esp32-s2-idf.yaml
new file mode 100644
index 0000000000..2a73826c51
--- /dev/null
+++ b/tests/components/uart/test-uart_max_with_usb_cdc.esp32-s2-idf.yaml
@@ -0,0 +1,30 @@
+<<: !include ../logger/common-usb_cdc.yaml
+
+esphome:
+  on_boot:
+    then:
+      - uart.write:
+          id: uart_1
+          data: 'Hello World'
+      - uart.write:
+          id: uart_1
+          data: [0x00, 0x20, 0x42]
+
+uart:
+  - id: uart_1
+    tx_pin: 4
+    rx_pin: 5
+    baud_rate: 9600
+    data_bits: 8
+    rx_buffer_size: 512
+    parity: EVEN
+    stop_bits: 2
+
+  - id: uart_2
+    tx_pin: 6
+    rx_pin: 7
+    baud_rate: 9600
+    data_bits: 8
+    rx_buffer_size: 512
+    parity: EVEN
+    stop_bits: 2
diff --git a/tests/components/uart/test-uart_max_with_usb_cdc.esp32-s3-ard.yaml b/tests/components/uart/test-uart_max_with_usb_cdc.esp32-s3-ard.yaml
new file mode 100644
index 0000000000..2a73826c51
--- /dev/null
+++ b/tests/components/uart/test-uart_max_with_usb_cdc.esp32-s3-ard.yaml
@@ -0,0 +1,30 @@
+<<: !include ../logger/common-usb_cdc.yaml
+
+esphome:
+  on_boot:
+    then:
+      - uart.write:
+          id: uart_1
+          data: 'Hello World'
+      - uart.write:
+          id: uart_1
+          data: [0x00, 0x20, 0x42]
+
+uart:
+  - id: uart_1
+    tx_pin: 4
+    rx_pin: 5
+    baud_rate: 9600
+    data_bits: 8
+    rx_buffer_size: 512
+    parity: EVEN
+    stop_bits: 2
+
+  - id: uart_2
+    tx_pin: 6
+    rx_pin: 7
+    baud_rate: 9600
+    data_bits: 8
+    rx_buffer_size: 512
+    parity: EVEN
+    stop_bits: 2
diff --git a/tests/components/uart/test-uart_max_with_usb_serial_jtag.esp32-c3-idf.yaml b/tests/components/uart/test-uart_max_with_usb_serial_jtag.esp32-c3-idf.yaml
new file mode 100644
index 0000000000..e0a07dde91
--- /dev/null
+++ b/tests/components/uart/test-uart_max_with_usb_serial_jtag.esp32-c3-idf.yaml
@@ -0,0 +1,30 @@
+<<: !include ../logger/common-usb_serial_jtag.yaml
+
+esphome:
+  on_boot:
+    then:
+      - uart.write:
+          id: uart_1
+          data: 'Hello World'
+      - uart.write:
+          id: uart_1
+          data: [0x00, 0x20, 0x42]
+
+uart:
+  - id: uart_1
+    tx_pin: 4
+    rx_pin: 5
+    baud_rate: 9600
+    data_bits: 8
+    rx_buffer_size: 512
+    parity: EVEN
+    stop_bits: 2
+
+  - id: uart_2
+    tx_pin: 6
+    rx_pin: 7
+    baud_rate: 9600
+    data_bits: 8
+    rx_buffer_size: 512
+    parity: EVEN
+    stop_bits: 2
diff --git a/tests/components/uart/test-uart_max_with_usb_serial_jtag.esp32-s3-idf.yaml b/tests/components/uart/test-uart_max_with_usb_serial_jtag.esp32-s3-idf.yaml
new file mode 100644
index 0000000000..e0a07dde91
--- /dev/null
+++ b/tests/components/uart/test-uart_max_with_usb_serial_jtag.esp32-s3-idf.yaml
@@ -0,0 +1,30 @@
+<<: !include ../logger/common-usb_serial_jtag.yaml
+
+esphome:
+  on_boot:
+    then:
+      - uart.write:
+          id: uart_1
+          data: 'Hello World'
+      - uart.write:
+          id: uart_1
+          data: [0x00, 0x20, 0x42]
+
+uart:
+  - id: uart_1
+    tx_pin: 4
+    rx_pin: 5
+    baud_rate: 9600
+    data_bits: 8
+    rx_buffer_size: 512
+    parity: EVEN
+    stop_bits: 2
+
+  - id: uart_2
+    tx_pin: 6
+    rx_pin: 7
+    baud_rate: 9600
+    data_bits: 8
+    rx_buffer_size: 512
+    parity: EVEN
+    stop_bits: 2
diff --git a/tests/components/uart/test.esp32.yaml b/tests/components/uart/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/uart/test.esp32.yaml
rename to tests/components/uart/test.esp32-ard.yaml
diff --git a/tests/components/uart/test.esp32-c3.yaml b/tests/components/uart/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/uart/test.esp32-c3.yaml
rename to tests/components/uart/test.esp32-c3-ard.yaml
diff --git a/tests/components/uart/test.esp8266.yaml b/tests/components/uart/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/uart/test.esp8266.yaml
rename to tests/components/uart/test.esp8266-ard.yaml
diff --git a/tests/components/uart/test.host.yaml b/tests/components/uart/test.host.yaml
new file mode 100644
index 0000000000..63f0ade084
--- /dev/null
+++ b/tests/components/uart/test.host.yaml
@@ -0,0 +1,13 @@
+esphome:
+  on_boot:
+    then:
+      - uart.write: 'Hello World'
+      - uart.write: [0x00, 0x20, 0x42]
+
+uart:
+  - id: uart_uart
+    port: "/dev/ttyS0"
+    baud_rate: 9600
+    data_bits: 8
+    parity: EVEN
+    stop_bits: 2
diff --git a/tests/components/uart/test.rp2040.yaml b/tests/components/uart/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/uart/test.rp2040.yaml
rename to tests/components/uart/test.rp2040-ard.yaml
diff --git a/tests/components/ufire_ec/test.esp32.yaml b/tests/components/ufire_ec/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ufire_ec/test.esp32.yaml
rename to tests/components/ufire_ec/test.esp32-ard.yaml
diff --git a/tests/components/ufire_ec/test.esp32-c3.yaml b/tests/components/ufire_ec/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ufire_ec/test.esp32-c3.yaml
rename to tests/components/ufire_ec/test.esp32-c3-ard.yaml
diff --git a/tests/components/ufire_ec/test.esp8266.yaml b/tests/components/ufire_ec/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ufire_ec/test.esp8266.yaml
rename to tests/components/ufire_ec/test.esp8266-ard.yaml
diff --git a/tests/components/ufire_ec/test.rp2040.yaml b/tests/components/ufire_ec/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ufire_ec/test.rp2040.yaml
rename to tests/components/ufire_ec/test.rp2040-ard.yaml
diff --git a/tests/components/ufire_ise/test.esp32.yaml b/tests/components/ufire_ise/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ufire_ise/test.esp32.yaml
rename to tests/components/ufire_ise/test.esp32-ard.yaml
diff --git a/tests/components/ufire_ise/test.esp32-c3.yaml b/tests/components/ufire_ise/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ufire_ise/test.esp32-c3.yaml
rename to tests/components/ufire_ise/test.esp32-c3-ard.yaml
diff --git a/tests/components/ufire_ise/test.esp8266.yaml b/tests/components/ufire_ise/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ufire_ise/test.esp8266.yaml
rename to tests/components/ufire_ise/test.esp8266-ard.yaml
diff --git a/tests/components/ufire_ise/test.rp2040.yaml b/tests/components/ufire_ise/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ufire_ise/test.rp2040.yaml
rename to tests/components/ufire_ise/test.rp2040-ard.yaml
diff --git a/tests/components/uln2003/test.esp32.yaml b/tests/components/uln2003/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/uln2003/test.esp32.yaml
rename to tests/components/uln2003/test.esp32-ard.yaml
diff --git a/tests/components/uln2003/test.esp32-c3.yaml b/tests/components/uln2003/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/uln2003/test.esp32-c3.yaml
rename to tests/components/uln2003/test.esp32-c3-ard.yaml
diff --git a/tests/components/uln2003/test.esp8266.yaml b/tests/components/uln2003/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/uln2003/test.esp8266.yaml
rename to tests/components/uln2003/test.esp8266-ard.yaml
diff --git a/tests/components/uln2003/test.rp2040.yaml b/tests/components/uln2003/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/uln2003/test.rp2040.yaml
rename to tests/components/uln2003/test.rp2040-ard.yaml
diff --git a/tests/components/thermostat/test.esp32-c3.yaml b/tests/components/ultrasonic/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/thermostat/test.esp32-c3.yaml
rename to tests/components/ultrasonic/test.esp32-ard.yaml
diff --git a/tests/components/thermostat/test.esp32.yaml b/tests/components/ultrasonic/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/thermostat/test.esp32.yaml
rename to tests/components/ultrasonic/test.esp32-c3-ard.yaml
diff --git a/tests/components/thermostat/test.esp8266.yaml b/tests/components/ultrasonic/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/thermostat/test.esp8266.yaml
rename to tests/components/ultrasonic/test.esp8266-ard.yaml
diff --git a/tests/components/thermostat/test.rp2040.yaml b/tests/components/ultrasonic/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/thermostat/test.rp2040.yaml
rename to tests/components/ultrasonic/test.rp2040-ard.yaml
diff --git a/tests/components/time/test.esp32-c3.yaml b/tests/components/update/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/time/test.esp32-c3.yaml
rename to tests/components/update/test.esp8266-ard.yaml
diff --git a/tests/components/time/test.esp32.yaml b/tests/components/update/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/time/test.esp32.yaml
rename to tests/components/update/test.rp2040-ard.yaml
diff --git a/tests/components/uponor_smatrix/test.esp32-ard.yaml b/tests/components/uponor_smatrix/test.esp32-ard.yaml
new file mode 100644
index 0000000000..f486544afa
--- /dev/null
+++ b/tests/components/uponor_smatrix/test.esp32-ard.yaml
@@ -0,0 +1,5 @@
+substitutions:
+  tx_pin: GPIO17
+  rx_pin: GPIO16
+
+<<: !include common.yaml
diff --git a/tests/components/uponor_smatrix/test.esp32-c3-ard.yaml b/tests/components/uponor_smatrix/test.esp32-c3-ard.yaml
new file mode 100644
index 0000000000..b516342f3b
--- /dev/null
+++ b/tests/components/uponor_smatrix/test.esp32-c3-ard.yaml
@@ -0,0 +1,5 @@
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
+
+<<: !include common.yaml
diff --git a/tests/components/uponor_smatrix/test.esp8266-ard.yaml b/tests/components/uponor_smatrix/test.esp8266-ard.yaml
new file mode 100644
index 0000000000..b516342f3b
--- /dev/null
+++ b/tests/components/uponor_smatrix/test.esp8266-ard.yaml
@@ -0,0 +1,5 @@
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
+
+<<: !include common.yaml
diff --git a/tests/components/uponor_smatrix/test.rp2040-ard.yaml b/tests/components/uponor_smatrix/test.rp2040-ard.yaml
new file mode 100644
index 0000000000..b516342f3b
--- /dev/null
+++ b/tests/components/uponor_smatrix/test.rp2040-ard.yaml
@@ -0,0 +1,5 @@
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
+
+<<: !include common.yaml
diff --git a/tests/components/uptime/common.yaml b/tests/components/uptime/common.yaml
index 872a0e7402..f63f80b050 100644
--- a/tests/components/uptime/common.yaml
+++ b/tests/components/uptime/common.yaml
@@ -1,3 +1,15 @@
+wifi:
+  ap:
+
+time:
+  - platform: sntp
+
 sensor:
   - platform: uptime
     name: Uptime Sensor
+  - platform: uptime
+    name: Uptime Sensor Seconds
+    type: seconds
+  - platform: uptime
+    name: Uptime Sensor Timestamp
+    type: timestamp
diff --git a/tests/components/time/test.esp8266.yaml b/tests/components/uptime/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/time/test.esp8266.yaml
rename to tests/components/uptime/test.esp32-ard.yaml
diff --git a/tests/components/time/test.rp2040.yaml b/tests/components/uptime/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/time/test.rp2040.yaml
rename to tests/components/uptime/test.esp32-c3-ard.yaml
diff --git a/tests/components/time_based/test.esp32-c3.yaml b/tests/components/uptime/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/time_based/test.esp32-c3.yaml
rename to tests/components/uptime/test.esp8266-ard.yaml
diff --git a/tests/components/time_based/test.esp32.yaml b/tests/components/uptime/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/time_based/test.esp32.yaml
rename to tests/components/uptime/test.rp2040-ard.yaml
diff --git a/tests/components/vbus/test.esp32.yaml b/tests/components/vbus/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/vbus/test.esp32.yaml
rename to tests/components/vbus/test.esp32-ard.yaml
diff --git a/tests/components/vbus/test.esp32-c3.yaml b/tests/components/vbus/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/vbus/test.esp32-c3.yaml
rename to tests/components/vbus/test.esp32-c3-ard.yaml
diff --git a/tests/components/vbus/test.esp8266.yaml b/tests/components/vbus/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/vbus/test.esp8266.yaml
rename to tests/components/vbus/test.esp8266-ard.yaml
diff --git a/tests/components/vbus/test.rp2040.yaml b/tests/components/vbus/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/vbus/test.rp2040.yaml
rename to tests/components/vbus/test.rp2040-ard.yaml
diff --git a/tests/components/veml3235/test.esp32.yaml b/tests/components/veml3235/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/veml3235/test.esp32.yaml
rename to tests/components/veml3235/test.esp32-ard.yaml
diff --git a/tests/components/veml3235/test.esp32-c3.yaml b/tests/components/veml3235/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/veml3235/test.esp32-c3.yaml
rename to tests/components/veml3235/test.esp32-c3-ard.yaml
diff --git a/tests/components/veml3235/test.esp8266.yaml b/tests/components/veml3235/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/veml3235/test.esp8266.yaml
rename to tests/components/veml3235/test.esp8266-ard.yaml
diff --git a/tests/components/veml3235/test.rp2040.yaml b/tests/components/veml3235/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/veml3235/test.rp2040.yaml
rename to tests/components/veml3235/test.rp2040-ard.yaml
diff --git a/tests/components/veml7700/test.esp32.yaml b/tests/components/veml7700/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/veml7700/test.esp32.yaml
rename to tests/components/veml7700/test.esp32-ard.yaml
diff --git a/tests/components/veml7700/test.esp32-c3.yaml b/tests/components/veml7700/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/veml7700/test.esp32-c3.yaml
rename to tests/components/veml7700/test.esp32-c3-ard.yaml
diff --git a/tests/components/veml7700/test.esp8266.yaml b/tests/components/veml7700/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/veml7700/test.esp8266.yaml
rename to tests/components/veml7700/test.esp8266-ard.yaml
diff --git a/tests/components/veml7700/test.rp2040.yaml b/tests/components/veml7700/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/veml7700/test.rp2040.yaml
rename to tests/components/veml7700/test.rp2040-ard.yaml
diff --git a/tests/components/time_based/test.esp8266.yaml b/tests/components/version/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/time_based/test.esp8266.yaml
rename to tests/components/version/test.esp32-ard.yaml
diff --git a/tests/components/time_based/test.rp2040.yaml b/tests/components/version/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/time_based/test.rp2040.yaml
rename to tests/components/version/test.esp32-c3-ard.yaml
diff --git a/tests/components/tm1638/test.esp32-c3.yaml b/tests/components/version/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tm1638/test.esp32-c3.yaml
rename to tests/components/version/test.esp8266-ard.yaml
diff --git a/tests/components/tm1638/test.esp32.yaml b/tests/components/version/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/tm1638/test.esp32.yaml
rename to tests/components/version/test.rp2040-ard.yaml
diff --git a/tests/components/vl53l0x/test.esp32.yaml b/tests/components/vl53l0x/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/vl53l0x/test.esp32.yaml
rename to tests/components/vl53l0x/test.esp32-ard.yaml
diff --git a/tests/components/vl53l0x/test.esp32-c3.yaml b/tests/components/vl53l0x/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/vl53l0x/test.esp32-c3.yaml
rename to tests/components/vl53l0x/test.esp32-c3-ard.yaml
diff --git a/tests/components/vl53l0x/test.esp8266.yaml b/tests/components/vl53l0x/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/vl53l0x/test.esp8266.yaml
rename to tests/components/vl53l0x/test.esp8266-ard.yaml
diff --git a/tests/components/vl53l0x/test.rp2040.yaml b/tests/components/vl53l0x/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/vl53l0x/test.rp2040.yaml
rename to tests/components/vl53l0x/test.rp2040-ard.yaml
diff --git a/tests/components/voice_assistant/test.esp32.yaml b/tests/components/voice_assistant/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/voice_assistant/test.esp32.yaml
rename to tests/components/voice_assistant/test.esp32-ard.yaml
diff --git a/tests/components/voice_assistant/test.esp32-c3.yaml b/tests/components/voice_assistant/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/voice_assistant/test.esp32-c3.yaml
rename to tests/components/voice_assistant/test.esp32-c3-ard.yaml
diff --git a/tests/components/tm1638/test.esp8266.yaml b/tests/components/wake_on_lan/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tm1638/test.esp8266.yaml
rename to tests/components/wake_on_lan/test.esp32-ard.yaml
diff --git a/tests/components/tm1638/test.rp2040.yaml b/tests/components/wake_on_lan/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tm1638/test.rp2040.yaml
rename to tests/components/wake_on_lan/test.esp32-c3-ard.yaml
diff --git a/tests/components/tm1651/test.esp32-c3.yaml b/tests/components/wake_on_lan/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tm1651/test.esp32-c3.yaml
rename to tests/components/wake_on_lan/test.esp8266-ard.yaml
diff --git a/tests/components/tm1651/test.esp32.yaml b/tests/components/wake_on_lan/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/tm1651/test.esp32.yaml
rename to tests/components/wake_on_lan/test.rp2040-ard.yaml
diff --git a/tests/components/waveshare_epaper/test.esp32.yaml b/tests/components/waveshare_epaper/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/waveshare_epaper/test.esp32.yaml
rename to tests/components/waveshare_epaper/test.esp32-ard.yaml
diff --git a/tests/components/waveshare_epaper/test.esp32-c3.yaml b/tests/components/waveshare_epaper/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/waveshare_epaper/test.esp32-c3.yaml
rename to tests/components/waveshare_epaper/test.esp32-c3-ard.yaml
diff --git a/tests/components/waveshare_epaper/test.esp8266.yaml b/tests/components/waveshare_epaper/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/waveshare_epaper/test.esp8266.yaml
rename to tests/components/waveshare_epaper/test.esp8266-ard.yaml
diff --git a/tests/components/waveshare_epaper/test.rp2040.yaml b/tests/components/waveshare_epaper/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/waveshare_epaper/test.rp2040.yaml
rename to tests/components/waveshare_epaper/test.rp2040-ard.yaml
diff --git a/tests/components/web_server/common.yaml b/tests/components/web_server/common.yaml
index 94388726c3..338d9e97d2 100644
--- a/tests/components/web_server/common.yaml
+++ b/tests/components/web_server/common.yaml
@@ -5,3 +5,38 @@ wifi:
 web_server:
   port: 8080
   version: 2
+
+binary_sensor:
+cover:
+fan:
+light:
+sensor:
+switch:
+button:
+text_sensor:
+climate:
+number:
+text:
+select:
+lock:
+valve:
+alarm_control_panel:
+api:
+time:
+  - platform: homeassistant
+    id: homeassistant_time
+datetime:
+  - platform: template
+    id: my_datetime_date
+    type: date
+    optimistic: yes
+  - platform: template
+    id: my_datetime_time
+    type: time
+    optimistic: yes
+  - platform: template
+    id: my_datetime
+    type: datetime
+    optimistic: yes
+event:
+update:
diff --git a/tests/components/tm1651/test.esp8266.yaml b/tests/components/web_server/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tm1651/test.esp8266.yaml
rename to tests/components/web_server/test.esp32-ard.yaml
diff --git a/tests/components/tm1651/test.rp2040.yaml b/tests/components/web_server/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tm1651/test.rp2040.yaml
rename to tests/components/web_server/test.esp32-c3-ard.yaml
diff --git a/tests/components/tx20/test.esp32-c3.yaml b/tests/components/web_server/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tx20/test.esp32-c3.yaml
rename to tests/components/web_server/test.esp8266-ard.yaml
diff --git a/tests/components/whirlpool/test.esp32-c3.yaml b/tests/components/whirlpool/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/whirlpool/test.esp32-c3.yaml
rename to tests/components/whirlpool/test.esp32-ard.yaml
diff --git a/tests/components/whirlpool/test.esp32.yaml b/tests/components/whirlpool/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/whirlpool/test.esp32.yaml
rename to tests/components/whirlpool/test.esp32-c3-ard.yaml
diff --git a/tests/components/whirlpool/test.esp8266.yaml b/tests/components/whirlpool/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/whirlpool/test.esp8266.yaml
rename to tests/components/whirlpool/test.esp8266-ard.yaml
diff --git a/tests/components/whynter/test.esp32-c3.yaml b/tests/components/whynter/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/whynter/test.esp32-c3.yaml
rename to tests/components/whynter/test.esp32-ard.yaml
diff --git a/tests/components/whynter/test.esp32.yaml b/tests/components/whynter/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/whynter/test.esp32.yaml
rename to tests/components/whynter/test.esp32-c3-ard.yaml
diff --git a/tests/components/whynter/test.esp8266.yaml b/tests/components/whynter/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/whynter/test.esp8266.yaml
rename to tests/components/whynter/test.esp8266-ard.yaml
diff --git a/tests/components/tx20/test.esp32.yaml b/tests/components/wiegand/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/tx20/test.esp32.yaml
rename to tests/components/wiegand/test.esp32-ard.yaml
diff --git a/tests/components/tx20/test.esp8266.yaml b/tests/components/wiegand/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/tx20/test.esp8266.yaml
rename to tests/components/wiegand/test.esp32-c3-ard.yaml
diff --git a/tests/components/tx20/test.rp2040.yaml b/tests/components/wiegand/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/tx20/test.rp2040.yaml
rename to tests/components/wiegand/test.esp8266-ard.yaml
diff --git a/tests/components/ultrasonic/test.esp32-c3.yaml b/tests/components/wiegand/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/ultrasonic/test.esp32-c3.yaml
rename to tests/components/wiegand/test.rp2040-ard.yaml
diff --git a/tests/components/wifi/common-eap.yaml b/tests/components/wifi/common-eap.yaml
new file mode 100644
index 0000000000..779cd6b49a
--- /dev/null
+++ b/tests/components/wifi/common-eap.yaml
@@ -0,0 +1,7 @@
+wifi:
+  networks:
+    - ssid: MySSID
+      eap:
+        username: username
+        password: password
+        identity: identity
diff --git a/tests/components/wifi/test-eap.esp32-ard.yaml b/tests/components/wifi/test-eap.esp32-ard.yaml
new file mode 100644
index 0000000000..9177e5de10
--- /dev/null
+++ b/tests/components/wifi/test-eap.esp32-ard.yaml
@@ -0,0 +1 @@
+<<: !include common-eap.yaml
diff --git a/tests/components/wifi/test-eap.esp32-idf.yaml b/tests/components/wifi/test-eap.esp32-idf.yaml
new file mode 100644
index 0000000000..9177e5de10
--- /dev/null
+++ b/tests/components/wifi/test-eap.esp32-idf.yaml
@@ -0,0 +1 @@
+<<: !include common-eap.yaml
diff --git a/tests/components/ultrasonic/test.esp32.yaml b/tests/components/wifi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/ultrasonic/test.esp32.yaml
rename to tests/components/wifi/test.esp32-ard.yaml
diff --git a/tests/components/ultrasonic/test.esp8266.yaml b/tests/components/wifi/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/ultrasonic/test.esp8266.yaml
rename to tests/components/wifi/test.esp32-c3-ard.yaml
diff --git a/tests/components/ultrasonic/test.rp2040.yaml b/tests/components/wifi/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/ultrasonic/test.rp2040.yaml
rename to tests/components/wifi/test.esp8266-ard.yaml
diff --git a/tests/components/update/test.esp8266.yaml b/tests/components/wifi/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/update/test.esp8266.yaml
rename to tests/components/wifi/test.rp2040-ard.yaml
diff --git a/tests/components/update/test.rp2040.yaml b/tests/components/wifi_info/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/update/test.rp2040.yaml
rename to tests/components/wifi_info/test.esp32-ard.yaml
diff --git a/tests/components/uptime/test.esp32-c3.yaml b/tests/components/wifi_info/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/uptime/test.esp32-c3.yaml
rename to tests/components/wifi_info/test.esp32-c3-ard.yaml
diff --git a/tests/components/uptime/test.esp32.yaml b/tests/components/wifi_info/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/uptime/test.esp32.yaml
rename to tests/components/wifi_info/test.esp8266-ard.yaml
diff --git a/tests/components/uptime/test.esp8266.yaml b/tests/components/wifi_info/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/uptime/test.esp8266.yaml
rename to tests/components/wifi_info/test.rp2040-ard.yaml
diff --git a/tests/components/uptime/test.rp2040.yaml b/tests/components/wifi_signal/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/uptime/test.rp2040.yaml
rename to tests/components/wifi_signal/test.esp32-ard.yaml
diff --git a/tests/components/version/test.esp32-c3.yaml b/tests/components/wifi_signal/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/version/test.esp32-c3.yaml
rename to tests/components/wifi_signal/test.esp32-c3-ard.yaml
diff --git a/tests/components/version/test.esp32.yaml b/tests/components/wifi_signal/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/version/test.esp32.yaml
rename to tests/components/wifi_signal/test.esp8266-ard.yaml
diff --git a/tests/components/version/test.esp8266.yaml b/tests/components/wifi_signal/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/version/test.esp8266.yaml
rename to tests/components/wifi_signal/test.rp2040-ard.yaml
diff --git a/tests/components/wireguard/test.bk72xx.yaml b/tests/components/wireguard/common.yaml
similarity index 94%
rename from tests/components/wireguard/test.bk72xx.yaml
rename to tests/components/wireguard/common.yaml
index 85325139a9..cd7ab1075e 100644
--- a/tests/components/wireguard/test.bk72xx.yaml
+++ b/tests/components/wireguard/common.yaml
@@ -8,7 +8,7 @@ time:
 wireguard:
   address: 172.16.34.100
   netmask: 255.255.255.0
-  # NEVER use the following keys for your vpn, they are now public!
+  # NEVER use the following keys for your VPN -- they are now public!
   private_key: wPBMxtNYH3mChicrbpsRpZIasIdPq3yZuthn23FbGG8=
   peer_public_key: Hs2JfikvYU03/Kv3YoAs1hrUIPPTEkpsZKSPUljE9yc=
   peer_preshared_key: 20fjM5GRnSolGPC5SRj9ljgIUyQfruv0B0bvLl3Yt60=
diff --git a/tests/components/version/test.rp2040.yaml b/tests/components/wireguard/test.bk72xx-ard.yaml
similarity index 100%
rename from tests/components/version/test.rp2040.yaml
rename to tests/components/wireguard/test.bk72xx-ard.yaml
diff --git a/tests/components/wireguard/test.esp32-ard.yaml b/tests/components/wireguard/test.esp32-ard.yaml
new file mode 100644
index 0000000000..2798f8e566
--- /dev/null
+++ b/tests/components/wireguard/test.esp32-ard.yaml
@@ -0,0 +1,4 @@
+<<: !include common.yaml
+
+network:
+  enable_ipv6: true
diff --git a/tests/components/wake_on_lan/test.esp32-c3.yaml b/tests/components/wireguard/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/wake_on_lan/test.esp32-c3.yaml
rename to tests/components/wireguard/test.esp32-c3-ard.yaml
diff --git a/tests/components/wireguard/test.esp32-c3-idf.yaml b/tests/components/wireguard/test.esp32-c3-idf.yaml
index 37d1727842..dade44d145 100644
--- a/tests/components/wireguard/test.esp32-c3-idf.yaml
+++ b/tests/components/wireguard/test.esp32-c3-idf.yaml
@@ -1,60 +1 @@
-wifi:
-  ssid: MySSID
-  password: password1
-
-time:
-  - platform: sntp
-
-wireguard:
-  id: vpn
-  address: 172.16.34.100
-  netmask: 255.255.255.0
-  # NEVER use the following keys for your vpn, they are now public!
-  private_key: wPBMxtNYH3mChicrbpsRpZIasIdPq3yZuthn23FbGG8=
-  peer_public_key: Hs2JfikvYU03/Kv3YoAs1hrUIPPTEkpsZKSPUljE9yc=
-  peer_preshared_key: 20fjM5GRnSolGPC5SRj9ljgIUyQfruv0B0bvLl3Yt60=
-  peer_endpoint: wg.server.example
-  peer_persistent_keepalive: 25s
-  peer_allowed_ips:
-    - 172.16.34.0/24
-    - 192.168.4.0/24
-
-binary_sensor:
-  - platform: wireguard
-    status:
-      name: 'WireGuard Status'
-    enabled:
-      name: 'WireGuard Enabled'
-
-sensor:
-  - platform: wireguard
-    latest_handshake:
-      name: 'WireGuard Latest Handshake'
-
-text_sensor:
-  - platform: wireguard
-    address:
-      name: 'WireGuard Address'
-
-button:
-  - platform: template
-    name: 'Toggle WireGuard'
-    entity_category: config
-    on_press:
-      - if:
-          condition: wireguard.enabled
-          then:
-            - wireguard.disable:
-          else:
-            - wireguard.enable:
-
-  - platform: template
-    name: 'Log WireGuard status'
-    entity_category: config
-    on_press:
-      - if:
-          condition: wireguard.peer_online
-          then:
-            - logger.log: 'wireguard remote peer is online'
-          else:
-            - logger.log: 'wireguard remote peer is offline'
+<<: !include common.yaml
diff --git a/tests/components/wireguard/test.esp32-c3.yaml b/tests/components/wireguard/test.esp32-c3.yaml
deleted file mode 100644
index 37d1727842..0000000000
--- a/tests/components/wireguard/test.esp32-c3.yaml
+++ /dev/null
@@ -1,60 +0,0 @@
-wifi:
-  ssid: MySSID
-  password: password1
-
-time:
-  - platform: sntp
-
-wireguard:
-  id: vpn
-  address: 172.16.34.100
-  netmask: 255.255.255.0
-  # NEVER use the following keys for your vpn, they are now public!
-  private_key: wPBMxtNYH3mChicrbpsRpZIasIdPq3yZuthn23FbGG8=
-  peer_public_key: Hs2JfikvYU03/Kv3YoAs1hrUIPPTEkpsZKSPUljE9yc=
-  peer_preshared_key: 20fjM5GRnSolGPC5SRj9ljgIUyQfruv0B0bvLl3Yt60=
-  peer_endpoint: wg.server.example
-  peer_persistent_keepalive: 25s
-  peer_allowed_ips:
-    - 172.16.34.0/24
-    - 192.168.4.0/24
-
-binary_sensor:
-  - platform: wireguard
-    status:
-      name: 'WireGuard Status'
-    enabled:
-      name: 'WireGuard Enabled'
-
-sensor:
-  - platform: wireguard
-    latest_handshake:
-      name: 'WireGuard Latest Handshake'
-
-text_sensor:
-  - platform: wireguard
-    address:
-      name: 'WireGuard Address'
-
-button:
-  - platform: template
-    name: 'Toggle WireGuard'
-    entity_category: config
-    on_press:
-      - if:
-          condition: wireguard.enabled
-          then:
-            - wireguard.disable:
-          else:
-            - wireguard.enable:
-
-  - platform: template
-    name: 'Log WireGuard status'
-    entity_category: config
-    on_press:
-      - if:
-          condition: wireguard.peer_online
-          then:
-            - logger.log: 'wireguard remote peer is online'
-          else:
-            - logger.log: 'wireguard remote peer is offline'
diff --git a/tests/components/wireguard/test.esp32-idf.yaml b/tests/components/wireguard/test.esp32-idf.yaml
index 9ea7f00bdb..2798f8e566 100644
--- a/tests/components/wireguard/test.esp32-idf.yaml
+++ b/tests/components/wireguard/test.esp32-idf.yaml
@@ -1,62 +1,4 @@
-wifi:
-  ssid: "MySSID1"
-  password: "password1"
+<<: !include common.yaml
 
 network:
   enable_ipv6: true
-
-time:
-  - platform: sntp
-
-wireguard:
-  address: 172.16.34.100
-  netmask: 255.255.255.0
-  # NEVER use the following keys for your vpn, they are now public!
-  private_key: wPBMxtNYH3mChicrbpsRpZIasIdPq3yZuthn23FbGG8=
-  peer_public_key: Hs2JfikvYU03/Kv3YoAs1hrUIPPTEkpsZKSPUljE9yc=
-  peer_preshared_key: 20fjM5GRnSolGPC5SRj9ljgIUyQfruv0B0bvLl3Yt60=
-  peer_endpoint: wg.server.example
-  peer_persistent_keepalive: 25s
-  peer_allowed_ips:
-    - 172.16.34.0/24
-    - 192.168.4.0/24
-
-binary_sensor:
-  - platform: wireguard
-    status:
-      name: 'WireGuard Status'
-    enabled:
-      name: 'WireGuard Enabled'
-
-sensor:
-  - platform: wireguard
-    latest_handshake:
-      name: 'WireGuard Latest Handshake'
-
-text_sensor:
-  - platform: wireguard
-    address:
-      name: 'WireGuard Address'
-
-button:
-  - platform: template
-    name: 'Toggle WireGuard'
-    entity_category: config
-    on_press:
-      - if:
-          condition: wireguard.enabled
-          then:
-            - wireguard.disable:
-          else:
-            - wireguard.enable:
-
-  - platform: template
-    name: 'Log WireGuard status'
-    entity_category: config
-    on_press:
-      - if:
-          condition: wireguard.peer_online
-          then:
-            - logger.log: 'wireguard remote peer is online'
-          else:
-            - logger.log: 'wireguard remote peer is offline'
diff --git a/tests/components/wireguard/test.esp32.yaml b/tests/components/wireguard/test.esp32.yaml
deleted file mode 100644
index 9ea7f00bdb..0000000000
--- a/tests/components/wireguard/test.esp32.yaml
+++ /dev/null
@@ -1,62 +0,0 @@
-wifi:
-  ssid: "MySSID1"
-  password: "password1"
-
-network:
-  enable_ipv6: true
-
-time:
-  - platform: sntp
-
-wireguard:
-  address: 172.16.34.100
-  netmask: 255.255.255.0
-  # NEVER use the following keys for your vpn, they are now public!
-  private_key: wPBMxtNYH3mChicrbpsRpZIasIdPq3yZuthn23FbGG8=
-  peer_public_key: Hs2JfikvYU03/Kv3YoAs1hrUIPPTEkpsZKSPUljE9yc=
-  peer_preshared_key: 20fjM5GRnSolGPC5SRj9ljgIUyQfruv0B0bvLl3Yt60=
-  peer_endpoint: wg.server.example
-  peer_persistent_keepalive: 25s
-  peer_allowed_ips:
-    - 172.16.34.0/24
-    - 192.168.4.0/24
-
-binary_sensor:
-  - platform: wireguard
-    status:
-      name: 'WireGuard Status'
-    enabled:
-      name: 'WireGuard Enabled'
-
-sensor:
-  - platform: wireguard
-    latest_handshake:
-      name: 'WireGuard Latest Handshake'
-
-text_sensor:
-  - platform: wireguard
-    address:
-      name: 'WireGuard Address'
-
-button:
-  - platform: template
-    name: 'Toggle WireGuard'
-    entity_category: config
-    on_press:
-      - if:
-          condition: wireguard.enabled
-          then:
-            - wireguard.disable:
-          else:
-            - wireguard.enable:
-
-  - platform: template
-    name: 'Log WireGuard status'
-    entity_category: config
-    on_press:
-      - if:
-          condition: wireguard.peer_online
-          then:
-            - logger.log: 'wireguard remote peer is online'
-          else:
-            - logger.log: 'wireguard remote peer is offline'
diff --git a/tests/components/wireguard/test.esp8266-ard.yaml b/tests/components/wireguard/test.esp8266-ard.yaml
new file mode 100644
index 0000000000..2798f8e566
--- /dev/null
+++ b/tests/components/wireguard/test.esp8266-ard.yaml
@@ -0,0 +1,4 @@
+<<: !include common.yaml
+
+network:
+  enable_ipv6: true
diff --git a/tests/components/wireguard/test.esp8266.yaml b/tests/components/wireguard/test.esp8266.yaml
deleted file mode 100644
index 9ea7f00bdb..0000000000
--- a/tests/components/wireguard/test.esp8266.yaml
+++ /dev/null
@@ -1,62 +0,0 @@
-wifi:
-  ssid: "MySSID1"
-  password: "password1"
-
-network:
-  enable_ipv6: true
-
-time:
-  - platform: sntp
-
-wireguard:
-  address: 172.16.34.100
-  netmask: 255.255.255.0
-  # NEVER use the following keys for your vpn, they are now public!
-  private_key: wPBMxtNYH3mChicrbpsRpZIasIdPq3yZuthn23FbGG8=
-  peer_public_key: Hs2JfikvYU03/Kv3YoAs1hrUIPPTEkpsZKSPUljE9yc=
-  peer_preshared_key: 20fjM5GRnSolGPC5SRj9ljgIUyQfruv0B0bvLl3Yt60=
-  peer_endpoint: wg.server.example
-  peer_persistent_keepalive: 25s
-  peer_allowed_ips:
-    - 172.16.34.0/24
-    - 192.168.4.0/24
-
-binary_sensor:
-  - platform: wireguard
-    status:
-      name: 'WireGuard Status'
-    enabled:
-      name: 'WireGuard Enabled'
-
-sensor:
-  - platform: wireguard
-    latest_handshake:
-      name: 'WireGuard Latest Handshake'
-
-text_sensor:
-  - platform: wireguard
-    address:
-      name: 'WireGuard Address'
-
-button:
-  - platform: template
-    name: 'Toggle WireGuard'
-    entity_category: config
-    on_press:
-      - if:
-          condition: wireguard.enabled
-          then:
-            - wireguard.disable:
-          else:
-            - wireguard.enable:
-
-  - platform: template
-    name: 'Log WireGuard status'
-    entity_category: config
-    on_press:
-      - if:
-          condition: wireguard.peer_online
-          then:
-            - logger.log: 'wireguard remote peer is online'
-          else:
-            - logger.log: 'wireguard remote peer is offline'
diff --git a/tests/components/wk2132_i2c/test.esp32.yaml b/tests/components/wk2132_i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wk2132_i2c/test.esp32.yaml
rename to tests/components/wk2132_i2c/test.esp32-ard.yaml
diff --git a/tests/components/wk2132_i2c/test.esp32-s3.yaml b/tests/components/wk2132_i2c/test.esp32-s3-ard.yaml
similarity index 100%
rename from tests/components/wk2132_i2c/test.esp32-s3.yaml
rename to tests/components/wk2132_i2c/test.esp32-s3-ard.yaml
diff --git a/tests/components/wk2132_spi/test.esp32.yaml b/tests/components/wk2132_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wk2132_spi/test.esp32.yaml
rename to tests/components/wk2132_spi/test.esp32-ard.yaml
diff --git a/tests/components/wk2132_spi/test.esp32-s3.yaml b/tests/components/wk2132_spi/test.esp32-s3-ard.yaml
similarity index 100%
rename from tests/components/wk2132_spi/test.esp32-s3.yaml
rename to tests/components/wk2132_spi/test.esp32-s3-ard.yaml
diff --git a/tests/components/wk2168_i2c/test.esp32.yaml b/tests/components/wk2168_i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wk2168_i2c/test.esp32.yaml
rename to tests/components/wk2168_i2c/test.esp32-ard.yaml
diff --git a/tests/components/wk2168_i2c/test.esp32-s3.yaml b/tests/components/wk2168_i2c/test.esp32-s3-ard.yaml
similarity index 100%
rename from tests/components/wk2168_i2c/test.esp32-s3.yaml
rename to tests/components/wk2168_i2c/test.esp32-s3-ard.yaml
diff --git a/tests/components/wk2168_spi/test.esp32.yaml b/tests/components/wk2168_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wk2168_spi/test.esp32.yaml
rename to tests/components/wk2168_spi/test.esp32-ard.yaml
diff --git a/tests/components/wk2168_spi/test.esp32-s3.yaml b/tests/components/wk2168_spi/test.esp32-s3-ard.yaml
similarity index 100%
rename from tests/components/wk2168_spi/test.esp32-s3.yaml
rename to tests/components/wk2168_spi/test.esp32-s3-ard.yaml
diff --git a/tests/components/wk2204_i2c/test.esp32.yaml b/tests/components/wk2204_i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wk2204_i2c/test.esp32.yaml
rename to tests/components/wk2204_i2c/test.esp32-ard.yaml
diff --git a/tests/components/wk2204_i2c/test.esp32-s3.yaml b/tests/components/wk2204_i2c/test.esp32-s3-ard.yaml
similarity index 100%
rename from tests/components/wk2204_i2c/test.esp32-s3.yaml
rename to tests/components/wk2204_i2c/test.esp32-s3-ard.yaml
diff --git a/tests/components/wk2204_spi/test.esp32.yaml b/tests/components/wk2204_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wk2204_spi/test.esp32.yaml
rename to tests/components/wk2204_spi/test.esp32-ard.yaml
diff --git a/tests/components/wk2204_spi/test.esp32-s3.yaml b/tests/components/wk2204_spi/test.esp32-s3-ard.yaml
similarity index 100%
rename from tests/components/wk2204_spi/test.esp32-s3.yaml
rename to tests/components/wk2204_spi/test.esp32-s3-ard.yaml
diff --git a/tests/components/wk2212_i2c/test.esp32.yaml b/tests/components/wk2212_i2c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wk2212_i2c/test.esp32.yaml
rename to tests/components/wk2212_i2c/test.esp32-ard.yaml
diff --git a/tests/components/wk2212_i2c/test.esp32-s3.yaml b/tests/components/wk2212_i2c/test.esp32-s3-ard.yaml
similarity index 100%
rename from tests/components/wk2212_i2c/test.esp32-s3.yaml
rename to tests/components/wk2212_i2c/test.esp32-s3-ard.yaml
diff --git a/tests/components/wk2212_spi/test.esp32.yaml b/tests/components/wk2212_spi/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wk2212_spi/test.esp32.yaml
rename to tests/components/wk2212_spi/test.esp32-ard.yaml
diff --git a/tests/components/wk2212_spi/test.esp32-s3.yaml b/tests/components/wk2212_spi/test.esp32-s3-ard.yaml
similarity index 100%
rename from tests/components/wk2212_spi/test.esp32-s3.yaml
rename to tests/components/wk2212_spi/test.esp32-s3-ard.yaml
diff --git a/tests/components/wl_134/test.esp32.yaml b/tests/components/wl_134/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wl_134/test.esp32.yaml
rename to tests/components/wl_134/test.esp32-ard.yaml
diff --git a/tests/components/wl_134/test.esp32-c3.yaml b/tests/components/wl_134/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/wl_134/test.esp32-c3.yaml
rename to tests/components/wl_134/test.esp32-c3-ard.yaml
diff --git a/tests/components/wl_134/test.esp8266.yaml b/tests/components/wl_134/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/wl_134/test.esp8266.yaml
rename to tests/components/wl_134/test.esp8266-ard.yaml
diff --git a/tests/components/wl_134/test.rp2040.yaml b/tests/components/wl_134/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/wl_134/test.rp2040.yaml
rename to tests/components/wl_134/test.rp2040-ard.yaml
diff --git a/tests/components/wled/test.esp32-c3.yaml b/tests/components/wled/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wled/test.esp32-c3.yaml
rename to tests/components/wled/test.esp32-ard.yaml
diff --git a/tests/components/wled/test.esp32.yaml b/tests/components/wled/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/wled/test.esp32.yaml
rename to tests/components/wled/test.esp32-c3-ard.yaml
diff --git a/tests/components/wled/test.esp8266.yaml b/tests/components/wled/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/wled/test.esp8266.yaml
rename to tests/components/wled/test.esp8266-ard.yaml
diff --git a/tests/components/x9c/test.esp32.yaml b/tests/components/x9c/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/x9c/test.esp32.yaml
rename to tests/components/x9c/test.esp32-ard.yaml
diff --git a/tests/components/x9c/test.esp32-c3.yaml b/tests/components/x9c/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/x9c/test.esp32-c3.yaml
rename to tests/components/x9c/test.esp32-c3-ard.yaml
diff --git a/tests/components/x9c/test.esp8266.yaml b/tests/components/x9c/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/x9c/test.esp8266.yaml
rename to tests/components/x9c/test.esp8266-ard.yaml
diff --git a/tests/components/x9c/test.rp2040.yaml b/tests/components/x9c/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/x9c/test.rp2040.yaml
rename to tests/components/x9c/test.rp2040-ard.yaml
diff --git a/tests/components/xgzp68xx/test.esp32.yaml b/tests/components/xgzp68xx/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/xgzp68xx/test.esp32.yaml
rename to tests/components/xgzp68xx/test.esp32-ard.yaml
diff --git a/tests/components/xgzp68xx/test.esp32-c3.yaml b/tests/components/xgzp68xx/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/xgzp68xx/test.esp32-c3.yaml
rename to tests/components/xgzp68xx/test.esp32-c3-ard.yaml
diff --git a/tests/components/xgzp68xx/test.esp8266.yaml b/tests/components/xgzp68xx/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/xgzp68xx/test.esp8266.yaml
rename to tests/components/xgzp68xx/test.esp8266-ard.yaml
diff --git a/tests/components/xgzp68xx/test.rp2040.yaml b/tests/components/xgzp68xx/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/xgzp68xx/test.rp2040.yaml
rename to tests/components/xgzp68xx/test.rp2040-ard.yaml
diff --git a/tests/components/wake_on_lan/test.esp32.yaml b/tests/components/xiaomi_ble/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wake_on_lan/test.esp32.yaml
rename to tests/components/xiaomi_ble/test.esp32-ard.yaml
diff --git a/tests/components/wake_on_lan/test.esp8266.yaml b/tests/components/xiaomi_ble/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/wake_on_lan/test.esp8266.yaml
rename to tests/components/xiaomi_ble/test.esp32-c3-ard.yaml
diff --git a/tests/components/wake_on_lan/test.rp2040.yaml b/tests/components/xiaomi_cgd1/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wake_on_lan/test.rp2040.yaml
rename to tests/components/xiaomi_cgd1/test.esp32-ard.yaml
diff --git a/tests/components/web_server/test.esp32-c3.yaml b/tests/components/xiaomi_cgd1/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/web_server/test.esp32-c3.yaml
rename to tests/components/xiaomi_cgd1/test.esp32-c3-ard.yaml
diff --git a/tests/components/web_server/test.esp32.yaml b/tests/components/xiaomi_cgdk2/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/web_server/test.esp32.yaml
rename to tests/components/xiaomi_cgdk2/test.esp32-ard.yaml
diff --git a/tests/components/web_server/test.esp8266.yaml b/tests/components/xiaomi_cgdk2/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/web_server/test.esp8266.yaml
rename to tests/components/xiaomi_cgdk2/test.esp32-c3-ard.yaml
diff --git a/tests/components/wiegand/test.esp32-c3.yaml b/tests/components/xiaomi_cgg1/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wiegand/test.esp32-c3.yaml
rename to tests/components/xiaomi_cgg1/test.esp32-ard.yaml
diff --git a/tests/components/wiegand/test.esp32.yaml b/tests/components/xiaomi_cgg1/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/wiegand/test.esp32.yaml
rename to tests/components/xiaomi_cgg1/test.esp32-c3-ard.yaml
diff --git a/tests/components/wiegand/test.esp8266.yaml b/tests/components/xiaomi_cgpr1/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wiegand/test.esp8266.yaml
rename to tests/components/xiaomi_cgpr1/test.esp32-ard.yaml
diff --git a/tests/components/wiegand/test.rp2040.yaml b/tests/components/xiaomi_cgpr1/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/wiegand/test.rp2040.yaml
rename to tests/components/xiaomi_cgpr1/test.esp32-c3-ard.yaml
diff --git a/tests/components/wifi/test.esp32-c3.yaml b/tests/components/xiaomi_gcls002/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wifi/test.esp32-c3.yaml
rename to tests/components/xiaomi_gcls002/test.esp32-ard.yaml
diff --git a/tests/components/wifi/test.esp32.yaml b/tests/components/xiaomi_gcls002/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/wifi/test.esp32.yaml
rename to tests/components/xiaomi_gcls002/test.esp32-c3-ard.yaml
diff --git a/tests/components/wifi/test.esp8266.yaml b/tests/components/xiaomi_hhccjcy01/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wifi/test.esp8266.yaml
rename to tests/components/xiaomi_hhccjcy01/test.esp32-ard.yaml
diff --git a/tests/components/wifi/test.rp2040.yaml b/tests/components/xiaomi_hhccjcy01/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/wifi/test.rp2040.yaml
rename to tests/components/xiaomi_hhccjcy01/test.esp32-c3-ard.yaml
diff --git a/tests/components/wifi_info/test.esp32-c3.yaml b/tests/components/xiaomi_hhccpot002/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wifi_info/test.esp32-c3.yaml
rename to tests/components/xiaomi_hhccpot002/test.esp32-ard.yaml
diff --git a/tests/components/wifi_info/test.esp32.yaml b/tests/components/xiaomi_hhccpot002/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/wifi_info/test.esp32.yaml
rename to tests/components/xiaomi_hhccpot002/test.esp32-c3-ard.yaml
diff --git a/tests/components/wifi_info/test.esp8266.yaml b/tests/components/xiaomi_jqjcy01ym/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wifi_info/test.esp8266.yaml
rename to tests/components/xiaomi_jqjcy01ym/test.esp32-ard.yaml
diff --git a/tests/components/wifi_info/test.rp2040.yaml b/tests/components/xiaomi_jqjcy01ym/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/wifi_info/test.rp2040.yaml
rename to tests/components/xiaomi_jqjcy01ym/test.esp32-c3-ard.yaml
diff --git a/tests/components/wifi_signal/test.esp32-c3.yaml b/tests/components/xiaomi_lywsd02/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wifi_signal/test.esp32-c3.yaml
rename to tests/components/xiaomi_lywsd02/test.esp32-ard.yaml
diff --git a/tests/components/wifi_signal/test.esp32.yaml b/tests/components/xiaomi_lywsd02/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/wifi_signal/test.esp32.yaml
rename to tests/components/xiaomi_lywsd02/test.esp32-c3-ard.yaml
diff --git a/tests/components/xiaomi_lywsd02/test.esp32-c3.yaml b/tests/components/xiaomi_lywsd02/test.esp32-c3.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_lywsd02/test.esp32-c3.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_lywsd02/test.esp32.yaml b/tests/components/xiaomi_lywsd02/test.esp32.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_lywsd02/test.esp32.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/wifi_signal/test.esp8266.yaml b/tests/components/xiaomi_lywsd03mmc/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/wifi_signal/test.esp8266.yaml
rename to tests/components/xiaomi_lywsd03mmc/test.esp32-ard.yaml
diff --git a/tests/components/wifi_signal/test.rp2040.yaml b/tests/components/xiaomi_lywsd03mmc/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/wifi_signal/test.rp2040.yaml
rename to tests/components/xiaomi_lywsd03mmc/test.esp32-c3-ard.yaml
diff --git a/tests/components/xiaomi_lywsd03mmc/test.esp32-c3.yaml b/tests/components/xiaomi_lywsd03mmc/test.esp32-c3.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_lywsd03mmc/test.esp32-c3.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_lywsd03mmc/test.esp32.yaml b/tests/components/xiaomi_lywsd03mmc/test.esp32.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_lywsd03mmc/test.esp32.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_ble/test.esp32-c3.yaml b/tests/components/xiaomi_lywsdcgq/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/xiaomi_ble/test.esp32-c3.yaml
rename to tests/components/xiaomi_lywsdcgq/test.esp32-ard.yaml
diff --git a/tests/components/xiaomi_ble/test.esp32.yaml b/tests/components/xiaomi_lywsdcgq/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/xiaomi_ble/test.esp32.yaml
rename to tests/components/xiaomi_lywsdcgq/test.esp32-c3-ard.yaml
diff --git a/tests/components/xiaomi_lywsdcgq/test.esp32-c3.yaml b/tests/components/xiaomi_lywsdcgq/test.esp32-c3.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_lywsdcgq/test.esp32-c3.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_lywsdcgq/test.esp32.yaml b/tests/components/xiaomi_lywsdcgq/test.esp32.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_lywsdcgq/test.esp32.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_cgd1/test.esp32-c3.yaml b/tests/components/xiaomi_mhoc303/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/xiaomi_cgd1/test.esp32-c3.yaml
rename to tests/components/xiaomi_mhoc303/test.esp32-ard.yaml
diff --git a/tests/components/xiaomi_cgd1/test.esp32.yaml b/tests/components/xiaomi_mhoc303/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/xiaomi_cgd1/test.esp32.yaml
rename to tests/components/xiaomi_mhoc303/test.esp32-c3-ard.yaml
diff --git a/tests/components/xiaomi_mhoc303/test.esp32-c3.yaml b/tests/components/xiaomi_mhoc303/test.esp32-c3.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_mhoc303/test.esp32-c3.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_mhoc303/test.esp32.yaml b/tests/components/xiaomi_mhoc303/test.esp32.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_mhoc303/test.esp32.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_cgdk2/test.esp32-c3.yaml b/tests/components/xiaomi_mhoc401/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/xiaomi_cgdk2/test.esp32-c3.yaml
rename to tests/components/xiaomi_mhoc401/test.esp32-ard.yaml
diff --git a/tests/components/xiaomi_cgdk2/test.esp32.yaml b/tests/components/xiaomi_mhoc401/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/xiaomi_cgdk2/test.esp32.yaml
rename to tests/components/xiaomi_mhoc401/test.esp32-c3-ard.yaml
diff --git a/tests/components/xiaomi_mhoc401/test.esp32-c3.yaml b/tests/components/xiaomi_mhoc401/test.esp32-c3.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_mhoc401/test.esp32-c3.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_mhoc401/test.esp32.yaml b/tests/components/xiaomi_mhoc401/test.esp32.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_mhoc401/test.esp32.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_cgg1/test.esp32-c3.yaml b/tests/components/xiaomi_miscale copy/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/xiaomi_cgg1/test.esp32-c3.yaml
rename to tests/components/xiaomi_miscale copy/test.esp32-ard.yaml
diff --git a/tests/components/xiaomi_cgg1/test.esp32.yaml b/tests/components/xiaomi_miscale copy/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/xiaomi_cgg1/test.esp32.yaml
rename to tests/components/xiaomi_miscale copy/test.esp32-c3-ard.yaml
diff --git a/tests/components/xiaomi_miscale copy/test.esp32-c3.yaml b/tests/components/xiaomi_miscale copy/test.esp32-c3.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_miscale copy/test.esp32-c3.yaml	
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_miscale copy/test.esp32.yaml b/tests/components/xiaomi_miscale copy/test.esp32.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_miscale copy/test.esp32.yaml	
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_cgpr1/test.esp32-c3.yaml b/tests/components/xiaomi_miscale/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/xiaomi_cgpr1/test.esp32-c3.yaml
rename to tests/components/xiaomi_miscale/test.esp32-ard.yaml
diff --git a/tests/components/xiaomi_cgpr1/test.esp32.yaml b/tests/components/xiaomi_miscale/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/xiaomi_cgpr1/test.esp32.yaml
rename to tests/components/xiaomi_miscale/test.esp32-c3-ard.yaml
diff --git a/tests/components/xiaomi_miscale/test.esp32-c3.yaml b/tests/components/xiaomi_miscale/test.esp32-c3.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_miscale/test.esp32-c3.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_miscale/test.esp32.yaml b/tests/components/xiaomi_miscale/test.esp32.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_miscale/test.esp32.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_gcls002/test.esp32-c3.yaml b/tests/components/xiaomi_mjyd02yla/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/xiaomi_gcls002/test.esp32-c3.yaml
rename to tests/components/xiaomi_mjyd02yla/test.esp32-ard.yaml
diff --git a/tests/components/xiaomi_gcls002/test.esp32.yaml b/tests/components/xiaomi_mjyd02yla/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/xiaomi_gcls002/test.esp32.yaml
rename to tests/components/xiaomi_mjyd02yla/test.esp32-c3-ard.yaml
diff --git a/tests/components/xiaomi_mjyd02yla/test.esp32-c3.yaml b/tests/components/xiaomi_mjyd02yla/test.esp32-c3.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_mjyd02yla/test.esp32-c3.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_mjyd02yla/test.esp32.yaml b/tests/components/xiaomi_mjyd02yla/test.esp32.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_mjyd02yla/test.esp32.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_hhccjcy01/test.esp32-c3.yaml b/tests/components/xiaomi_mue4094rt/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/xiaomi_hhccjcy01/test.esp32-c3.yaml
rename to tests/components/xiaomi_mue4094rt/test.esp32-ard.yaml
diff --git a/tests/components/xiaomi_hhccjcy01/test.esp32.yaml b/tests/components/xiaomi_mue4094rt/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/xiaomi_hhccjcy01/test.esp32.yaml
rename to tests/components/xiaomi_mue4094rt/test.esp32-c3-ard.yaml
diff --git a/tests/components/xiaomi_mue4094rt/test.esp32-c3.yaml b/tests/components/xiaomi_mue4094rt/test.esp32-c3.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_mue4094rt/test.esp32-c3.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_mue4094rt/test.esp32.yaml b/tests/components/xiaomi_mue4094rt/test.esp32.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_mue4094rt/test.esp32.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_hhccpot002/test.esp32-c3.yaml b/tests/components/xiaomi_rtcgq02lm/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/xiaomi_hhccpot002/test.esp32-c3.yaml
rename to tests/components/xiaomi_rtcgq02lm/test.esp32-ard.yaml
diff --git a/tests/components/xiaomi_hhccpot002/test.esp32.yaml b/tests/components/xiaomi_rtcgq02lm/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/xiaomi_hhccpot002/test.esp32.yaml
rename to tests/components/xiaomi_rtcgq02lm/test.esp32-c3-ard.yaml
diff --git a/tests/components/xiaomi_rtcgq02lm/test.esp32-c3.yaml b/tests/components/xiaomi_rtcgq02lm/test.esp32-c3.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_rtcgq02lm/test.esp32-c3.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_rtcgq02lm/test.esp32.yaml b/tests/components/xiaomi_rtcgq02lm/test.esp32.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_rtcgq02lm/test.esp32.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_jqjcy01ym/test.esp32-c3.yaml b/tests/components/xiaomi_wx08zm/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/xiaomi_jqjcy01ym/test.esp32-c3.yaml
rename to tests/components/xiaomi_wx08zm/test.esp32-ard.yaml
diff --git a/tests/components/xiaomi_jqjcy01ym/test.esp32.yaml b/tests/components/xiaomi_wx08zm/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/xiaomi_jqjcy01ym/test.esp32.yaml
rename to tests/components/xiaomi_wx08zm/test.esp32-c3-ard.yaml
diff --git a/tests/components/xiaomi_wx08zm/test.esp32-c3.yaml b/tests/components/xiaomi_wx08zm/test.esp32-c3.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_wx08zm/test.esp32-c3.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xiaomi_wx08zm/test.esp32.yaml b/tests/components/xiaomi_wx08zm/test.esp32.yaml
deleted file mode 100644
index dade44d145..0000000000
--- a/tests/components/xiaomi_wx08zm/test.esp32.yaml
+++ /dev/null
@@ -1 +0,0 @@
-<<: !include common.yaml
diff --git a/tests/components/xl9535/test.esp32.yaml b/tests/components/xl9535/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/xl9535/test.esp32.yaml
rename to tests/components/xl9535/test.esp32-ard.yaml
diff --git a/tests/components/xl9535/test.esp32-c3.yaml b/tests/components/xl9535/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/xl9535/test.esp32-c3.yaml
rename to tests/components/xl9535/test.esp32-c3-ard.yaml
diff --git a/tests/components/xl9535/test.esp8266.yaml b/tests/components/xl9535/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/xl9535/test.esp8266.yaml
rename to tests/components/xl9535/test.esp8266-ard.yaml
diff --git a/tests/components/xl9535/test.rp2040.yaml b/tests/components/xl9535/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/xl9535/test.rp2040.yaml
rename to tests/components/xl9535/test.rp2040-ard.yaml
diff --git a/tests/components/xpt2046/test.esp32.yaml b/tests/components/xpt2046/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/xpt2046/test.esp32.yaml
rename to tests/components/xpt2046/test.esp32-ard.yaml
diff --git a/tests/components/xpt2046/test.esp32-c3.yaml b/tests/components/xpt2046/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/xpt2046/test.esp32-c3.yaml
rename to tests/components/xpt2046/test.esp32-c3-ard.yaml
diff --git a/tests/components/xpt2046/test.esp32-s2.yaml b/tests/components/xpt2046/test.esp32-s2-ard.yaml
similarity index 100%
rename from tests/components/xpt2046/test.esp32-s2.yaml
rename to tests/components/xpt2046/test.esp32-s2-ard.yaml
diff --git a/tests/components/xpt2046/test.esp8266.yaml b/tests/components/xpt2046/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/xpt2046/test.esp8266.yaml
rename to tests/components/xpt2046/test.esp8266-ard.yaml
diff --git a/tests/components/xpt2046/test.rp2040.yaml b/tests/components/xpt2046/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/xpt2046/test.rp2040.yaml
rename to tests/components/xpt2046/test.rp2040-ard.yaml
diff --git a/tests/components/yashima/test.esp32-c3.yaml b/tests/components/yashima/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/yashima/test.esp32-c3.yaml
rename to tests/components/yashima/test.esp32-ard.yaml
diff --git a/tests/components/yashima/test.esp32.yaml b/tests/components/yashima/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/yashima/test.esp32.yaml
rename to tests/components/yashima/test.esp32-c3-ard.yaml
diff --git a/tests/components/yashima/test.esp8266.yaml b/tests/components/yashima/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/yashima/test.esp8266.yaml
rename to tests/components/yashima/test.esp8266-ard.yaml
diff --git a/tests/components/zhlt01/test.esp32-c3.yaml b/tests/components/zhlt01/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/zhlt01/test.esp32-c3.yaml
rename to tests/components/zhlt01/test.esp32-ard.yaml
diff --git a/tests/components/zhlt01/test.esp32.yaml b/tests/components/zhlt01/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/zhlt01/test.esp32.yaml
rename to tests/components/zhlt01/test.esp32-c3-ard.yaml
diff --git a/tests/components/zhlt01/test.esp8266.yaml b/tests/components/zhlt01/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/zhlt01/test.esp8266.yaml
rename to tests/components/zhlt01/test.esp8266-ard.yaml
diff --git a/tests/components/zio_ultrasonic/test.esp32.yaml b/tests/components/zio_ultrasonic/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/zio_ultrasonic/test.esp32.yaml
rename to tests/components/zio_ultrasonic/test.esp32-ard.yaml
diff --git a/tests/components/zio_ultrasonic/test.esp32-c3.yaml b/tests/components/zio_ultrasonic/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/zio_ultrasonic/test.esp32-c3.yaml
rename to tests/components/zio_ultrasonic/test.esp32-c3-ard.yaml
diff --git a/tests/components/zio_ultrasonic/test.esp8266.yaml b/tests/components/zio_ultrasonic/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/zio_ultrasonic/test.esp8266.yaml
rename to tests/components/zio_ultrasonic/test.esp8266-ard.yaml
diff --git a/tests/components/zio_ultrasonic/test.rp2040.yaml b/tests/components/zio_ultrasonic/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/zio_ultrasonic/test.rp2040.yaml
rename to tests/components/zio_ultrasonic/test.rp2040-ard.yaml
diff --git a/tests/components/zyaura/test.esp32.yaml b/tests/components/zyaura/test.esp32-ard.yaml
similarity index 100%
rename from tests/components/zyaura/test.esp32.yaml
rename to tests/components/zyaura/test.esp32-ard.yaml
diff --git a/tests/components/zyaura/test.esp32-c3.yaml b/tests/components/zyaura/test.esp32-c3-ard.yaml
similarity index 100%
rename from tests/components/zyaura/test.esp32-c3.yaml
rename to tests/components/zyaura/test.esp32-c3-ard.yaml
diff --git a/tests/components/zyaura/test.esp8266.yaml b/tests/components/zyaura/test.esp8266-ard.yaml
similarity index 100%
rename from tests/components/zyaura/test.esp8266.yaml
rename to tests/components/zyaura/test.esp8266-ard.yaml
diff --git a/tests/components/zyaura/test.rp2040.yaml b/tests/components/zyaura/test.rp2040-ard.yaml
similarity index 100%
rename from tests/components/zyaura/test.rp2040.yaml
rename to tests/components/zyaura/test.rp2040-ard.yaml
diff --git a/tests/test1.1.yaml b/tests/test1.1.yaml
deleted file mode 100644
index c71aa6e0ef..0000000000
--- a/tests/test1.1.yaml
+++ /dev/null
@@ -1,232 +0,0 @@
----
-substitutions:
-  devicename: test1_1
-  sensorname: my
-  textname: template
-  roomname: fastled_room
-
-esphome:
-  name: test1-1
-  name_add_mac_suffix: true
-  platform: ESP32
-  board: nodemcu-32s
-  platformio_options:
-    board_build.partitions: huge_app.csv
-  on_loop:
-    then:
-      - light.addressable_set:
-          id: addr1
-          range_from: 0
-          range_to: 100
-          red: 100%
-          green: !lambda "return 255;"
-          blue: 0%
-          white: 100%
-
-wled:
-
-wifi:
-  networks:
-    - ssid: "MySSID"
-      password: "password1"
-
-uart:
-  - id: adalight_uart
-    tx_pin: GPIO25
-    rx_pin: GPIO26
-    baud_rate: 115200
-    rx_buffer_size: 1024
-
-adalight:
-
-network:
-
-e131:
-
-power_supply:
-  - id: atx_power_supply
-    enable_time: 20ms
-    keep_on_time: 10s
-    enable_on_boot: true
-    pin:
-      number: 13
-      inverted: true
-
-i2c:
-  sda: 21
-  scl:
-    number: 22
-    allow_other_uses: true
-  scan: true
-  frequency: 100kHz
-  setup_priority: -100
-  id: i2c_bus
-
-pca9685:
-  frequency: 500
-  address: 0x0
-  i2c_id: i2c_bus
-
-output:
-  - platform: pca9685
-    id: pca_0
-    channel: 0
-  - platform: pca9685
-    id: pca_1
-    channel: 1
-  - platform: pca9685
-    id: pca_2
-    channel: 2
-
-light:
-  - platform: rgb
-    name: Living Room Lights
-    id: ${roomname}_lights
-    red: pca_0
-    green: pca_1
-    blue: pca_2
-  - platform: fastled_clockless
-    id: addr1
-    chipset: WS2811
-    pin:
-      allow_other_uses: true
-      number: GPIO23
-    num_leds: 60
-    rgb_order: BRG
-    max_refresh_rate: 20ms
-    power_supply: atx_power_supply
-    color_correct: [75%, 100%, 50%]
-    name: FastLED WS2811 Light
-    effects:
-      - addressable_color_wipe:
-      - addressable_color_wipe:
-          name: Color Wipe Effect With Custom Values
-          colors:
-            - red: 100%
-              green: 100%
-              blue: 100%
-              num_leds: 1
-            - red: 0%
-              green: 0%
-              blue: 0%
-              num_leds: 1
-          add_led_interval: 100ms
-          reverse: false
-      - addressable_scan:
-      - addressable_scan:
-          name: Scan Effect With Custom Values
-          move_interval: 100ms
-      - addressable_twinkle:
-      - addressable_twinkle:
-          name: Twinkle Effect With Custom Values
-          twinkle_probability: 5%
-          progress_interval: 4ms
-      - addressable_random_twinkle:
-      - addressable_random_twinkle:
-          name: Random Twinkle Effect With Custom Values
-          twinkle_probability: 5%
-          progress_interval: 32ms
-      - addressable_fireworks:
-      - addressable_fireworks:
-          name: Fireworks Effect With Custom Values
-          update_interval: 32ms
-          spark_probability: 10%
-          use_random_color: false
-          fade_out_rate: 120
-      - addressable_flicker:
-      - addressable_flicker:
-          name: Flicker Effect With Custom Values
-          update_interval: 16ms
-          intensity: 5%
-      - addressable_lambda:
-          name: Test For Custom Lambda Effect
-          lambda: |-
-            if (initial_run) {
-              it[0] = current_color;
-            }
-
-      - wled:
-          port: 11111
-
-      - adalight:
-          uart_id: adalight_uart
-
-      - e131:
-          universe: 1
-
-      - automation:
-          name: Custom Effect
-          sequence:
-            - light.addressable_set:
-                id: addr1
-                red: 100%
-                green: 100%
-                blue: 0%
-            - delay: 100ms
-            - light.addressable_set:
-                id: addr1
-                red: 0%
-                green: 100%
-                blue: 0%
-
-  - platform: fastled_spi
-    id: addr2
-    chipset: WS2801
-    data_pin:
-      allow_other_uses: true
-      number: GPIO23
-    clock_pin:
-      number: GPIO22
-      allow_other_uses: true
-    data_rate: 2MHz
-    num_leds: 60
-    rgb_order: BRG
-    name: FastLED SPI Light
-  - platform: neopixelbus
-    id: addr3
-    name: Neopixelbus Light
-    gamma_correct: 2.8
-    color_correct: [0.0, 0.0, 0.0, 0.0]
-    default_transition_length: 10s
-    power_supply: atx_power_supply
-    effects:
-      - addressable_flicker:
-          name: Flicker Effect With Custom Values
-          update_interval: 16ms
-          intensity: 5%
-    type: GRBW
-    variant: SK6812
-    method: ESP32_I2S_0
-    num_leds: 60
-    pin:
-      allow_other_uses: true
-      number: GPIO23
-  - platform: partition
-    name: Partition Light
-    segments:
-      - id: addr1
-        from: 0
-        to: 0
-      - id: addr2
-        from: 1
-        to: 10
-      - id: addr2
-        from: 20
-        to: 25
-      - single_light_id: ${roomname}_lights
-
-canbus:
-  - platform: esp32_can
-    id: esp32_internal_can
-    rx_pin: GPIO04
-    tx_pin: GPIO05
-    can_id: 4
-    bit_rate: 50kbps
-
-button:
-  - platform: template
-    name: Canbus Actions
-    on_press:
-      - canbus.send: "abc"
-      - canbus.send: [0, 1, 2]
-      - canbus.send: !lambda return {0, 1, 2};
diff --git a/tests/test1.yaml b/tests/test1.yaml
deleted file mode 100644
index 79cb1bba2b..0000000000
--- a/tests/test1.yaml
+++ /dev/null
@@ -1,4427 +0,0 @@
----
-substitutions:
-  devicename: test1
-  sensorname: my
-  textname: template
-  roomname: living_room
-
-esphome:
-  name: test1
-  name_add_mac_suffix: true
-  platform: ESP32
-  board: nodemcu-32s
-  platformio_options:
-    board_build.partitions: huge_app.csv
-  on_boot:
-    priority: 150.0
-    then:
-      - lambda: >-
-          ESP_LOGD("main", "ON BOOT!");
-  on_shutdown:
-    then:
-      - lambda: >-
-          ESP_LOGD("main", "ON SHUTDOWN!");
-  on_loop:
-    then:
-      - lambda: >-
-          ESP_LOGV("main", "ON LOOP!");
-  build_path: build/test1
-
-packages:
-  wifi: !include test_packages/test_packages_package_wifi.yaml
-  pkg_test: !include test_packages/test_packages_package1.yaml
-
-wifi:
-  networks:
-    - ssid: "MySSID"
-      password: "password1"
-    - ssid: "MySSID2"
-      password: ""
-      channel: 14
-      bssid: "A1:63:95:47:D3:1D"
-  manual_ip:
-    static_ip: 192.168.178.230
-    gateway: 192.168.178.1
-    subnet: 255.255.255.0
-    dns1: 1.1.1.1
-    dns2: 1.2.2.1
-  domain: .local
-  reboot_timeout: 120s
-  power_save_mode: light
-  on_connect:
-    - light.turn_on: ${roomname}_lights
-  on_disconnect:
-    - light.turn_off: ${roomname}_lights
-
-network:
-  enable_ipv6: true
-
-mdns:
-  disabled: false
-
-mqtt:
-  broker: "192.168.178.84"
-  port: 1883
-  username: "debug"
-  password: "debug"
-  client_id: someclient
-  use_abbreviations: false
-  discovery: true
-  discovery_retain: false
-  discovery_prefix: discovery
-  discovery_unique_id_generator: legacy
-  topic_prefix: helloworld
-  log_topic:
-    topic: helloworld/hi
-    level: INFO
-  birth_message:
-  will_message:
-  shutdown_message:
-    topic: topic/to/send/to
-    payload: hi
-    qos: 2
-    retain: true
-  keepalive: 60s
-  reboot_timeout: 60s
-  on_message:
-    - topic: my/custom/topic
-      qos: 0
-      then:
-        - lambda: >-
-            ESP_LOGD("main", "Got message %s", x.c_str());
-    - topic: livingroom/ota_mode
-      then:
-        - deep_sleep.prevent
-        - deep_sleep.allow
-    - topic: livingroom/ota_mode
-      then:
-        - deep_sleep.enter:
-  on_json_message:
-    topic: the/topic
-    then:
-      - if:
-          condition:
-            - wifi.connected:
-            - mqtt.connected:
-            - light.is_on: kitchen
-            - light.is_off: kitchen
-            - fan.is_on: fan_speed
-            - fan.is_off: fan_speed
-          then:
-            - lambda: |-
-                int data = x["my_data"];
-                ESP_LOGD("main", "The data is: %d", data);
-            - light.turn_on:
-                id: ${roomname}_lights
-                brightness: !lambda |-
-                  float brightness = 1.0;
-                  if (x.containsKey("brightness"))
-                    brightness = x["brightness"];
-                  return brightness;
-                effect: !lambda |-
-                  const char *effect = "None";
-                  if (x.containsKey("effect"))
-                    effect = x["effect"];
-                  return effect;
-            - light.control:
-                id: ${roomname}_lights
-                # yamllint disable-line rule:line-length
-                brightness: !lambda "return id(${roomname}_lights).current_values.get_brightness() + 0.5;"
-            - light.dim_relative:
-                id: ${roomname}_lights
-                relative_brightness: 5%
-            - uart.write:
-                id: uart_0
-                data: Hello World
-            - uart.write:
-                id: uart_0
-                data: [0x00, 0x20, 0x30]
-            - uart.write:
-                id: uart_0
-                data: !lambda |-
-                  return {};
-            - bluetooth_password.set:
-                id: my_ld2410
-                password: abcdef
-  on_connect:
-    - light.turn_on: ${roomname}_lights
-    - mqtt.publish:
-        topic: some/topic
-        payload: Hello
-  on_disconnect:
-    - light.turn_off: ${roomname}_lights
-
-i2c:
-  sda:
-    allow_other_uses: true
-    number: 21
-  scl:
-    allow_other_uses: true
-    number: 22
-  scan: true
-  frequency: 100kHz
-  setup_priority: -100
-  id: i2c_bus
-
-spi:
-  id: spi_bus
-  clk_pin:
-    allow_other_uses: true
-    number: GPIO21
-  mosi_pin:
-    allow_other_uses: true
-    number: GPIO22
-  miso_pin:
-    allow_other_uses: true
-    number: GPIO23
-
-uart:
-  - tx_pin:
-      allow_other_uses: true
-      number: GPIO22
-      inverted: true
-    rx_pin:
-      allow_other_uses: true
-      number: GPIO23
-      inverted: true
-    baud_rate: 115200
-    id: uart_0
-    parity: NONE
-    data_bits: 8
-    stop_bits: 1
-    rx_buffer_size: 512
-    debug:
-      dummy_receiver: true
-      direction: both
-      after:
-        bytes: 50
-        timeout: 500ms
-        delimiter: "\r\n"
-      sequence:
-        - lambda: UARTDebug::log_hex(direction, bytes, ':');
-        - lambda: UARTDebug::log_string(direction, bytes);
-        - lambda: UARTDebug::log_int(direction, bytes, ',');
-        - lambda: UARTDebug::log_binary(direction, bytes, ';');
-  - id: ld2410_uart
-    tx_pin:
-      allow_other_uses: true
-      number: 18
-    rx_pin:
-      allow_other_uses: true
-      number: 23
-    baud_rate: 256000
-    parity: NONE
-    stop_bits: 1
-  - id: dfrobot_mmwave_uart
-    tx_pin:
-      allow_other_uses: true
-      number: 14
-    rx_pin:
-      allow_other_uses: true
-      number: 27
-    baud_rate: 115200
-  - id: ld2420_uart
-    tx_pin:
-      allow_other_uses: true
-      number: 17
-    rx_pin:
-      allow_other_uses: true
-      number: 16
-    baud_rate: 115200
-    parity: NONE
-    stop_bits: 1
-  - id: gcja5_uart
-    rx_pin: GPIO10
-    parity: EVEN
-    baud_rate: 9600
-
-safe_mode:
-  num_attempts: 3
-  reboot_timeout: 2min
-
-ota:
-  - platform: esphome
-    password: "superlongpasswordthatnoonewillknow"
-    port: 3286
-    on_state_change:
-      then:
-        lambda: >-
-          ESP_LOGD("ota", "State %d", state);
-    on_begin:
-      then:
-        logger.log: OTA begin
-    on_progress:
-      then:
-        lambda: >-
-          ESP_LOGD("ota", "Got progress %f", x);
-    on_end:
-      then:
-        logger.log: OTA end
-    on_error:
-      then:
-        lambda: >-
-          ESP_LOGD("ota", "Got error code %d", x);
-
-logger:
-  baud_rate: 0
-  level: VERBOSE
-  logs:
-    mqtt.component: DEBUG
-    mqtt.client: ERROR
-
-web_server:
-  port: 8080
-  version: 2
-
-power_supply:
-  id: atx_power_supply
-  enable_time: 20ms
-  keep_on_time: 10s
-  pin:
-    number: 13
-    allow_other_uses: true
-    inverted: true
-
-deep_sleep:
-  run_duration: 20s
-  sleep_duration: 50s
-  wakeup_pin:
-    allow_other_uses: true
-    number: GPIO2
-    ignore_strapping_warning: true
-  wakeup_pin_mode: INVERT_WAKEUP
-
-ads1115:
-  address: 0x48
-  i2c_id: i2c_bus
-
-ads1118:
-  spi_id: spi_bus
-  cs_pin:
-    allow_other_uses: true
-    number: GPIO12
-
-as5600:
-  i2c_id: i2c_bus
-  dir_pin:
-    number: 27
-    allow_other_uses: true
-  direction: clockwise
-  start_position: 90deg
-  range: 180deg
-  watchdog: true
-  power_mode: low1
-  hysteresis: lsb1
-  slow_filter: 8x
-  fast_filter: lsb6
-
-as3935_spi:
-  cs_pin:
-    ignore_strapping_warning: true
-    allow_other_uses: true
-    number: GPIO12
-  irq_pin:
-    allow_other_uses: true
-    number: GPIO13
-
-esp32_ble:
-  io_capability: keyboard_only
-
-esp32_ble_tracker:
-
-ble_client:
-  - mac_address: AA:BB:CC:DD:EE:FF
-    id: ble_foo
-    auto_connect: true
-  - mac_address: 11:22:33:44:55:66
-    id: ble_blah
-    auto_connect: false
-    on_connect:
-      then:
-        - switch.turn_on: ble1_status
-    on_disconnect:
-      then:
-        - switch.turn_on: ble1_status
-    on_passkey_request:
-      then:
-        - ble_client.passkey_reply:
-            id: ble_blah
-            passkey: 123456
-    on_passkey_notification:
-      then:
-        - logger.log: "Passkey notification received"
-    on_numeric_comparison_request:
-      then:
-        - ble_client.numeric_comparison_reply:
-            id: ble_blah
-            accept: true
-  - mac_address: C4:4F:33:11:22:33
-    id: my_bedjet_ble_client
-
-bedjet:
-  - ble_client_id: my_bedjet_ble_client
-    id: my_bedjet_client
-    time_id: sntp_time
-mcp23s08:
-  - id: mcp23s08_hub
-    cs_pin:
-      ignore_strapping_warning: true
-      number: GPIO12
-      allow_other_uses: true
-    deviceaddress: 0
-
-mcp23s17:
-  - id: mcp23s17_hub
-    cs_pin:
-      ignore_strapping_warning: true
-      number: GPIO12
-      allow_other_uses: true
-    deviceaddress: 1
-
-micronova:
-  enable_rx_pin:
-    allow_other_uses: true
-    number: 4
-  uart_id: uart_0
-
-dfrobot_sen0395:
-  - id: mmwave
-    uart_id: dfrobot_mmwave_uart
-
-sensor:
-  - platform: xgzp68xx
-    i2c_id: i2c_bus
-    temperature:
-      name: Pressure Temperature
-    pressure:
-      name: Differential pressure
-    k_value: 4096
-
-  - platform: pmwcs3
-    i2c_id: i2c_bus
-    e25:
-      name: pmwcs3_e25
-    ec:
-      name: pmwcs3_ec
-    temperature:
-      name: pmwcs3_temperature
-    vwc:
-      name: pmwcs3_vwc
-  - platform: gcja5
-    pm_1_0:
-      name: "Particulate Matter <1.0µm Concentration"
-    pm_2_5:
-      name: "Particulate Matter <2.5µm Concentration"
-    pm_10_0:
-      name: "Particulate Matter <10.0µm Concentration"
-    pmc_0_5:
-      name: "PMC 0.5"
-    pmc_1_0:
-      name: "PMC 1.0"
-    pmc_2_5:
-      name: "PMC 2.5"
-    pmc_5_0:
-      name: "PMC 5.0"
-    pmc_10_0:
-      name: "PMC 10.0"
-    uart_id: gcja5_uart
-  - platform: internal_temperature
-    name: Internal Temperature
-  - platform: ble_client
-    type: characteristic
-    ble_client_id: ble_foo
-    name: Green iTag btn
-    service_uuid: ffe0
-    characteristic_uuid: ffe1
-    descriptor_uuid: ffe2
-    notify: true
-    update_interval: never
-    lambda: |-
-      ESP_LOGD("main", "Length of data is %i", x.size());
-      return x[0];
-    on_notify:
-      then:
-        - lambda: |-
-            ESP_LOGD("green_btn", "Button was pressed, val%f", x);
-  - platform: ble_client
-    type: rssi
-    ble_client_id: ble_foo
-    name: Green iTag RSSI
-    update_interval: 15s
-  - platform: adc
-    pin: A0
-    name: Living Room Brightness
-    update_interval: "1:01"
-    attenuation: 2.5db
-    unit_of_measurement: "°C"
-    icon: "mdi:water-percent"
-    accuracy_decimals: 5
-    expire_after: 120s
-    setup_priority: -100
-    force_update: true
-    filters:
-      - offset: 2.0
-      - multiply: 1.2
-      - calibrate_linear:
-          datapoints:
-            - 0.0 -> 0.0
-            - 40.0 -> 45.0
-            - 100.0 -> 102.5
-      - clamp:
-          min_value: -100
-          max_value: 100
-      - filter_out: 42.0
-      - filter_out: nan
-      - median:
-          window_size: 5
-          send_every: 5
-          send_first_at: 3
-      - min:
-          window_size: 5
-          send_every: 5
-          send_first_at: 3
-      - max:
-          window_size: 5
-          send_every: 5
-          send_first_at: 3
-      - sliding_window_moving_average:
-          window_size: 15
-          send_every: 15
-          send_first_at: 15
-      - exponential_moving_average:
-          alpha: 0.1
-          send_every: 15
-          send_first_at: 15
-      - throttle_average: 60s
-      - throttle: 1s
-      - heartbeat: 5s
-      - debounce: 0.1s
-      - delta: 5.0
-      - delta: 1%
-      - or:
-          - throttle: 1s
-          - delta: 5.0
-      - lambda: return x * (9.0/5.0) + 32.0;
-    on_value:
-      then:
-        # yamllint disable rule:line-length
-        - lambda: |-
-            ESP_LOGD("main", "Got value %f", x);
-            id(${sensorname}_sensor).publish_state(42.0);
-            ESP_LOGI("main", "Value of my sensor: %f", id(${sensorname}_sensor).state);
-            ESP_LOGI("main", "Raw Value of my sensor: %f", id(${sensorname}_sensor).state);
-        # yamllint enable rule:line-length
-    on_value_range:
-      above: 5
-      below: 10
-      then:
-        - lambda: >-
-            ESP_LOGD("main", "Got value range %f", x);
-        - wait_until: wifi.connected
-        - wait_until:
-            condition:
-              binary_sensor.is_on: binary_sensor1
-            timeout: 1s
-    on_raw_value:
-      - lambda: >-
-          ESP_LOGD("main", "Got raw value %f", x);
-      - logger.log:
-          level: DEBUG
-          format: Got raw value %f
-          args: ["x"]
-      - logger.log: Got raw value NAN
-      - mqtt.publish:
-          topic: some/topic
-          payload: Hello
-          qos: 2
-          retain: true
-  - platform: esp32_hall
-    name: ESP32 Hall Sensor
-  - platform: ads1115
-    multiplexer: A0_A1
-    gain: 1.024
-    id: ${sensorname}_sensor
-    filters:
-    state_topic: hi/me
-    retain: false
-    availability:
-  - platform: ads1118
-    name: ads1118 adc
-    multiplexer: A0_A1
-    gain: 1.024
-    type: adc
-  - platform: ads1118
-    name: ads1118 temperature
-    type: temperature
-  - platform: as5600
-    name: AS5600 Position
-    raw_position:
-      name: AS5600 Raw Position
-    gain:
-      name: AS5600 Gain
-    magnitude:
-      name: AS5600 Magnitude
-    status:
-      name: AS5600 Status
-  - platform: as7341
-    update_interval: 15s
-    gain: X8
-    atime: 120
-    astep: 99
-    f1:
-      name: F1
-    f2:
-      name: F2
-    f3:
-      name: F3
-    f4:
-      name: F4
-    f5:
-      name: F5
-    f6:
-      name: F6
-    f7:
-      name: F7
-    f8:
-      name: F8
-    clear:
-      name: Clear
-    nir:
-      name: NIR
-    i2c_id: i2c_bus
-  - platform: atm90e26
-    cs_pin:
-      allow_other_uses: true
-      number: 5
-    voltage:
-      name: Line Voltage
-    current:
-      name: CT Amps
-    power:
-      name: Active Watts
-    power_factor:
-      name: Power Factor
-    frequency:
-      name: Line Frequency
-    line_frequency: 50Hz
-    meter_constant: 1000
-    pl_const: 1429876
-    gain_pga: 1X
-    gain_metering: 7481
-    gain_voltage: 26400
-    gain_ct: 31251
-  - platform: atm90e32
-    cs_pin:
-      allow_other_uses: true
-      number: 5
-    phase_a:
-      voltage:
-        name: EMON Line Voltage A
-      current:
-        name: EMON CT1 Current
-      power:
-        name: EMON Active Power CT1
-      reactive_power:
-        name: EMON Reactive Power CT1
-      power_factor:
-        name: EMON Power Factor CT1
-      gain_voltage: 7305
-      gain_ct: 27961
-    phase_b:
-      current:
-        name: EMON CT2 Current
-      power:
-        name: EMON Active Power CT2
-      reactive_power:
-        name: EMON Reactive Power CT2
-      power_factor:
-        name: EMON Power Factor CT2
-      gain_voltage: 7305
-      gain_ct: 27961
-    phase_c:
-      current:
-        name: EMON CT3 Current
-      power:
-        name: EMON Active Power CT3
-      reactive_power:
-        name: EMON Reactive Power CT3
-      power_factor:
-        name: EMON Power Factor CT3
-      gain_voltage: 7305
-      gain_ct: 27961
-    frequency:
-      name: EMON Line Frequency
-    chip_temperature:
-      name: EMON Chip Temp A
-    line_frequency: 60Hz
-    current_phases: 3
-    gain_pga: 2X
-  - platform: bh1750
-    name: Living Room Brightness 3
-    internal: true
-    address: 0x23
-    update_interval: 30s
-    qos: 2
-    retain: false
-    availability:
-    state_topic: livingroom/custom_state_topic
-    i2c_id: i2c_bus
-  - platform: max44009
-    name: Outside Brightness 1
-    internal: true
-    address: 0x4A
-    update_interval: 30s
-    mode: low_power
-    i2c_id: i2c_bus
-  - platform: bme680
-    temperature:
-      name: Outside Temperature
-      oversampling: 16x
-    pressure:
-      name: Outside Pressure
-    humidity:
-      name: Outside Humidity
-    gas_resistance:
-      name: Outside Gas Sensor
-    address: 0x77
-    heater:
-      temperature: 320
-      duration: 150ms
-    update_interval: 15s
-    i2c_id: i2c_bus
-  - platform: bmp085
-    temperature:
-      name: Outside Temperature
-    pressure:
-      name: Outside Pressure
-      filters:
-        - lambda: >-
-            return x / powf(1.0 - (x / 44330.0), 5.255);
-    update_interval: 15s
-    i2c_id: i2c_bus
-  - platform: bmp280
-    temperature:
-      name: Outside Temperature
-      oversampling: 16x
-    pressure:
-      name: Outside Pressure
-    address: 0x77
-    update_interval: 15s
-    iir_filter: 16x
-    i2c_id: i2c_bus
-  - platform: dht
-    pin:
-      allow_other_uses: true
-      number: GPIO26
-    temperature:
-      id: dht_temperature
-      name: Living Room Temperature 3
-    humidity:
-      id: dht_humidity
-      name: Living Room Humidity 3
-    model: AM2302
-    update_interval: 15s
-  - platform: dht12
-    temperature:
-      name: Living Room Temperature 4
-    humidity:
-      name: Living Room Humidity 4
-    update_interval: 15s
-    i2c_id: i2c_bus
-  - platform: duty_cycle
-    pin:
-      allow_other_uses: true
-      number: GPIO25
-    name: Duty Cycle Sensor
-  - platform: ee895
-    co2:
-      name: Office CO2 1
-    temperature:
-      name: Office Temperature 1
-    pressure:
-      name: Office Pressure 1
-    address: 0x5F
-    i2c_id: i2c_bus
-  - platform: esp32_hall
-    name: ESP32 Hall Sensor
-    update_interval: 15s
-  - platform: ens210
-    temperature:
-      name: Living Room Temperature 5
-    humidity:
-      name: Living Room Humidity 5
-    update_interval: 15s
-    i2c_id: i2c_bus
-  - platform: hdc1080
-    temperature:
-      name: Living Room Temperature 6
-    humidity:
-      name: Living Room Humidity 5
-    update_interval: 15s
-    i2c_id: i2c_bus
-  - platform: hlw8012
-    sel_pin:
-      allow_other_uses: true
-      number: 5
-    cf_pin:
-      allow_other_uses: true
-      number: 14
-    cf1_pin:
-      allow_other_uses: true
-      number: 13
-    current:
-      name: HLW8012 Current
-    voltage:
-      name: HLW8012 Voltage
-    power:
-      name: HLW8012 Power
-      id: hlw8012_power
-    energy:
-      name: HLW8012 Energy
-      id: hlw8012_energy
-    update_interval: 15s
-    current_resistor: 0.001 ohm
-    voltage_divider: 2351
-    change_mode_every: "never"
-    initial_mode: VOLTAGE
-    model: hlw8012
-  - platform: total_daily_energy
-    power_id: hlw8012_power
-    name: HLW8012 Total Daily Energy
-  - platform: integration
-    sensor: hlw8012_power
-    name: Integration Sensor
-    time_unit: s
-  - platform: integration
-    sensor: hlw8012_power
-    name: Integration Sensor lazy
-    time_unit: s
-  - platform: hmc5883l
-    address: 0x68
-    field_strength_x:
-      name: HMC5883L Field Strength X
-    field_strength_y:
-      name: HMC5883L Field Strength Y
-    field_strength_z:
-      name: HMC5883L Field Strength Z
-    heading:
-      name: HMC5883L Heading
-    range: 130uT
-    oversampling: 8x
-    update_interval: 15s
-    i2c_id: i2c_bus
-  - platform: honeywell_hih_i2c
-    temperature:
-      name: Living Room Temperature 7
-    humidity:
-      name: Living Room Humidity 7
-    update_interval: 15s
-    i2c_id: i2c_bus
-  - platform: honeywellabp
-    pressure:
-      name: Honeywell pressure
-      min_pressure: 0
-      max_pressure: 15
-    temperature:
-      name: Honeywell temperature
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO5
-  - platform: honeywellabp2_i2c
-    pressure:
-      name: Honeywell2 pressure
-      min_pressure: 0
-      max_pressure: 16000
-      transfer_function: A
-    temperature:
-      name: Honeywell temperature
-    i2c_id: i2c_bus
-    address: 0x28
-  - platform: hte501
-    temperature:
-      name: Office Temperature 2
-    humidity:
-      name: Office Humidity 1
-    address: 0x40
-    i2c_id: i2c_bus
-  - platform: qmc5883l
-    address: 0x0D
-    field_strength_x:
-      name: QMC5883L Field Strength X
-    field_strength_y:
-      name: QMC5883L Field Strength Y
-    field_strength_z:
-      name: QMC5883L Field Strength Z
-    heading:
-      name: QMC5883L Heading
-    range: 800uT
-    oversampling: 256x
-    update_interval: 15s
-    i2c_id: i2c_bus
-  - platform: hx711
-    name: HX711 Value
-    dout_pin:
-      allow_other_uses: true
-      number: GPIO23
-    clk_pin:
-      allow_other_uses: true
-      number: GPIO25
-    gain: 128
-    update_interval: 15s
-  - platform: ina219
-    address: 0x40
-    shunt_resistance: 0.1 ohm
-    current:
-      name: INA219 Current
-    power:
-      name: INA219 Power
-    bus_voltage:
-      name: INA219 Bus Voltage
-    shunt_voltage:
-      name: INA219 Shunt Voltage
-    max_voltage: 32.0V
-    max_current: 3.2A
-    update_interval: 15s
-    i2c_id: i2c_bus
-  - platform: ina226
-    address: 0x40
-    shunt_resistance: 0.1 ohm
-    current:
-      name: INA226 Current
-    power:
-      name: INA226 Power
-    bus_voltage:
-      name: INA226 Bus Voltage
-    shunt_voltage:
-      name: INA226 Shunt Voltage
-    max_current: 3.2A
-    update_interval: 15s
-    i2c_id: i2c_bus
-  - platform: ina3221
-    address: 0x40
-    channel_1:
-      shunt_resistance: 0.1 ohm
-      current:
-        name: INA3221 Channel 1 Current
-      power:
-        name: INA3221 Channel 1 Power
-      bus_voltage:
-        name: INA3221 Channel 1 Bus Voltage
-      shunt_voltage:
-        name: INA3221 Channel 1 Shunt Voltage
-    update_interval: 15s
-    i2c_id: i2c_bus
-  - platform: kmeteriso
-    temperature:
-      name: Outside Temperature
-    internal_temperature:
-      name: Internal Ttemperature
-    update_interval: 15s
-    i2c_id: i2c_bus
-  - platform: combination
-    type: kalman
-    name: Kalman-filtered temperature
-    process_std_dev: 0.00139
-    sources:
-      - source: scd30_temperature
-        error: !lambda |-
-          return 0.4 + std::abs(x - 25) * 0.023;
-      - source: scd4x_temperature
-        error: 1.5
-  - platform: combination
-    type: linear
-    name: Linearly combined temperatures
-    sources:
-      - source: scd30_temperature
-        coeffecient: !lambda |-
-          return 0.4 + std::abs(x - 25) * 0.023;
-      - source: scd4x_temperature
-        coeffecient: 1.5
-  - platform: combination
-    type: max
-    name: Max of combined temperatures
-    sources:
-      - source: scd30_temperature
-      - source: scd4x_temperature
-  - platform: combination
-    type: mean
-    name: Mean of combined temperatures
-    sources:
-      - source: scd30_temperature
-      - source: scd4x_temperature
-  - platform: combination
-    type: median
-    name: Median of combined temperatures
-    sources:
-      - source: scd30_temperature
-      - source: scd4x_temperature
-  - platform: combination
-    type: min
-    name: Min of combined temperatures
-    sources:
-      - source: scd30_temperature
-      - source: scd4x_temperature
-  - platform: combination
-    type: most_recently_updated
-    name: Most recently updated of combined temperatures
-    sources:
-      - source: scd30_temperature
-      - source: scd4x_temperature
-  - platform: combination
-    type: range
-    name: Range of combined temperatures
-    sources:
-      - source: scd30_temperature
-      - source: scd4x_temperature
-  - platform: combination
-    type: sum
-    name: Sum of combined temperatures
-    sources:
-      - source: scd30_temperature
-      - source: scd4x_temperature
-  - platform: htu21d
-    temperature:
-      name: Living Room Temperature 6
-    humidity:
-      name: Living Room Humidity 6
-    heater:
-      name: Living Room Heater 6
-    update_interval: 15s
-    i2c_id: i2c_bus
-  - platform: max6675
-    name: Living Room Temperature
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO23
-    update_interval: 15s
-  - platform: max31855
-    name: Den Temperature
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO23
-    update_interval: 15s
-    reference_temperature:
-      name: MAX31855 Internal Temperature
-  - platform: max31856
-    name: BBQ Temperature
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO17
-    update_interval: 15s
-    mains_filter: 50Hz
-  - platform: max31865
-    name: Water Tank Temperature
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO23
-    update_interval: 15s
-    reference_resistance: 430 Ω
-    rtd_nominal_resistance: 100 Ω
-  - platform: mhz19
-    uart_id: uart_0
-    co2:
-      name: MH-Z19 CO2 Value
-    temperature:
-      name: MH-Z19 Temperature
-    update_interval: 15s
-    automatic_baseline_calibration: false
-  - platform: mpu6050
-    address: 0x68
-    accel_x:
-      name: MPU6050 Accel X
-    accel_y:
-      name: MPU6050 Accel Y
-    accel_z:
-      name: MPU6050 Accel z
-    gyro_x:
-      name: MPU6050 Gyro X
-    gyro_y:
-      name: MPU6050 Gyro Y
-    gyro_z:
-      name: MPU6050 Gyro z
-    temperature:
-      name: MPU6050 Temperature
-    i2c_id: i2c_bus
-  - platform: mpu6886
-    address: 0x68
-    accel_x:
-      name: MPU6886 Accel X
-    accel_y:
-      name: MPU6886 Accel Y
-    accel_z:
-      name: MPU6886 Accel z
-    gyro_x:
-      name: MPU6886 Gyro X
-    gyro_y:
-      name: MPU6886 Gyro Y
-    gyro_z:
-      name: MPU6886 Gyro z
-    temperature:
-      name: MPU6886 Temperature
-    i2c_id: i2c_bus
-  - platform: bmi160
-    address: 0x68
-    acceleration_x:
-      name: BMI160 Accel X
-    acceleration_y:
-      name: BMI160 Accel Y
-    acceleration_z:
-      name: BMI160 Accel z
-    gyroscope_x:
-      name: BMI160 Gyro X
-    gyroscope_y:
-      name: BMI160 Gyro Y
-    gyroscope_z:
-      name: BMI160 Gyro z
-    temperature:
-      name: BMI160 Temperature
-    i2c_id: i2c_bus
-  - platform: mmc5603
-    address: 0x30
-    field_strength_x:
-      name: HMC5883L Field Strength X
-    field_strength_y:
-      name: HMC5883L Field Strength Y
-    field_strength_z:
-      name: HMC5883L Field Strength Z
-    i2c_id: i2c_bus
-  - platform: dps310
-    temperature:
-      name: DPS310 Temperature
-    pressure:
-      name: DPS310 Pressure
-    address: 0x77
-    update_interval: 15s
-    i2c_id: i2c_bus
-  - platform: ms5611
-    temperature:
-      name: Outside Temperature
-    pressure:
-      name: Outside Pressure
-    address: 0x77
-    update_interval: 15s
-    i2c_id: i2c_bus
-  - platform: pmsa003i
-    pm_1_0:
-      name: PMSA003i PM1.0
-    pm_2_5:
-      name: PMSA003i PM2.5
-    pm_10_0:
-      name: PMSA003i PM10.0
-    pmc_0_3:
-      name: PMSA003i PMC <0.3µm
-    pmc_0_5:
-      name: PMSA003i PMC <0.5µm
-    pmc_1_0:
-      name: PMSA003i PMC <1µm
-    pmc_2_5:
-      name: PMSA003i PMC <2.5µm
-    pmc_5_0:
-      name: PMSA003i PMC <5µm
-    pmc_10_0:
-      name: PMSA003i PMC <10µm
-    address: 0x12
-    standard_units: true
-    i2c_id: i2c_bus
-  - platform: pulse_counter
-    name: Pulse Counter
-    pin:
-      ignore_strapping_warning: true
-      number: GPIO12
-      allow_other_uses: true
-    count_mode:
-      rising_edge: INCREMENT
-      falling_edge: DECREMENT
-    internal_filter: 13us
-    update_interval: 15s
-  - platform: pulse_meter
-    name: Pulse Meter
-    id: pulse_meter_sensor
-    pin:
-      ignore_strapping_warning: true
-      number: GPIO12
-      allow_other_uses: true
-    internal_filter: 100ms
-    timeout: 2 min
-    on_value:
-      - pulse_meter.set_total_pulses:
-          id: pulse_meter_sensor
-          value: 12345
-    total:
-      name: Pulse Meter Total
-  - platform: qmp6988
-    temperature:
-      name: Living Temperature QMP
-      oversampling: 32x
-    pressure:
-      name: Living Pressure QMP
-      oversampling: 2x
-    address: 0x70
-    update_interval: 30s
-    iir_filter: 16x
-    i2c_id: i2c_bus
-  - platform: rotary_encoder
-    name: Rotary Encoder
-    id: rotary_encoder1
-    pin_a:
-      allow_other_uses: true
-      number: GPIO23
-    pin_b:
-      allow_other_uses: true
-      number: GPIO25
-    pin_reset:
-      allow_other_uses: true
-      number: GPIO25
-    filters:
-      - or:
-          - debounce: 0.1s
-          - delta: 10
-    resolution: 4
-    min_value: -10
-    max_value: 30
-    on_value:
-      - sensor.rotary_encoder.set_value:
-          id: rotary_encoder1
-          value: 10
-      - sensor.rotary_encoder.set_value:
-          id: rotary_encoder1
-          value: !lambda "return -1;"
-    on_clockwise:
-      - logger.log: Clockwise
-      - display_menu.down: test_lcd_menu
-      - display_menu.down: test_graphical_display_menu
-    on_anticlockwise:
-      - logger.log: Anticlockwise
-      - display_menu.up: test_lcd_menu
-      - display_menu.up: test_graphical_display_menu
-  - platform: pulse_width
-    name: Pulse Width
-    pin:
-      allow_other_uses: true
-      number: GPIO12
-  - platform: sm300d2
-    uart_id: uart_0
-    co2:
-      name: SM300D2 CO2 Value
-    formaldehyde:
-      name: SM300D2 Formaldehyde Value
-    tvoc:
-      name: SM300D2 TVOC Value
-    pm_2_5:
-      name: SM300D2 PM2.5 Value
-    pm_10_0:
-      name: SM300D2 PM10 Value
-    temperature:
-      name: SM300D2 Temperature Value
-    humidity:
-      name: SM300D2 Humidity Value
-    update_interval: 60s
-  - platform: sht3xd
-    temperature:
-      name: Living Room Temperature 8
-    humidity:
-      name: Living Room Humidity 8
-    address: 0x44
-    i2c_id: i2c_bus
-    update_interval: 15s
-  - platform: sts3x
-    name: Living Room Temperature 9
-    address: 0x4A
-    i2c_id: i2c_bus
-  - platform: scd30
-    co2:
-      name: Living Room CO2 9
-    temperature:
-      id: scd30_temperature
-      name: Living Room Temperature 9
-    humidity:
-      name: Living Room Humidity 9
-    address: 0x61
-    update_interval: 15s
-    automatic_self_calibration: true
-    altitude_compensation: 10m
-    ambient_pressure_compensation: 961mBar
-    temperature_offset: 4.2C
-    i2c_id: i2c_bus
-  - platform: scd4x
-    id: scd40
-    co2:
-      name: SCD4X CO2
-    temperature:
-      id: scd4x_temperature
-      name: SCD4X Temperature
-    humidity:
-      name: SCD4X Humidity
-    update_interval: 15s
-    automatic_self_calibration: true
-    altitude_compensation: 10m
-    ambient_pressure_compensation: 961mBar
-    temperature_offset: 4.2C
-    i2c_id: i2c_bus
-  - platform: sfa30
-    formaldehyde:
-      name: "SFA30 formaldehyde"
-    temperature:
-      name: "SFA30 temperature"
-    humidity:
-      name: "SFA30 humidity"
-    i2c_id: i2c_bus
-    address: 0x5D
-    update_interval: 30s
-  - platform: sen0321
-    name: Workshop Ozone Sensor
-    id: sen0321_ozone
-    update_interval: 10s
-    i2c_id: i2c_bus
-  - platform: sgp30
-    eco2:
-      name: Workshop eCO2
-      accuracy_decimals: 1
-    tvoc:
-      name: Workshop TVOC
-      accuracy_decimals: 1
-    address: 0x58
-    update_interval: 5s
-    i2c_id: i2c_bus
-  - platform: sps30
-    pm_1_0:
-      name: Workshop PM <1µm Weight concentration
-      id: workshop_PM_1_0
-    pm_2_5:
-      name: Workshop PM <2.5µm Weight concentration
-      id: workshop_PM_2_5
-    pm_4_0:
-      name: Workshop PM <4µm Weight concentration
-      id: workshop_PM_4_0
-    pm_10_0:
-      name: Workshop PM <10µm Weight concentration
-      id: workshop_PM_10_0
-    pmc_0_5:
-      name: Workshop PM <0.5µm Number concentration
-      id: workshop_PMC_0_5
-    pmc_1_0:
-      name: Workshop PM <1µm Number concentration
-      id: workshop_PMC_1_0
-    pmc_2_5:
-      name: Workshop PM <2.5µm Number concentration
-      id: workshop_PMC_2_5
-    pmc_4_0:
-      name: Workshop PM <4µm Number concentration
-      id: workshop_PMC_4_0
-    pmc_10_0:
-      name: Workshop PM <10µm Number concentration
-      id: workshop_PMC_10_0
-    address: 0x69
-    update_interval: 10s
-    i2c_id: i2c_bus
-  - platform: sht4x
-    temperature:
-      name: SHT4X Temperature
-    humidity:
-      name: SHT4X Humidity
-    address: 0x44
-    update_interval: 15s
-    i2c_id: i2c_bus
-  - platform: shtcx
-    temperature:
-      name: Living Room Temperature 10
-    humidity:
-      name: Living Room Humidity 10
-    address: 0x70
-    update_interval: 15s
-    i2c_id: i2c_bus
-  - platform: template
-    name: Template Sensor
-    state_class: measurement
-    id: template_sensor
-    lambda: |-
-      if (id(ultrasonic_sensor1).state > 1) {
-        return 42.0;
-      } else {
-        return {};
-      }
-    update_interval: 15s
-    on_value:
-      - sensor.template.publish:
-          id: template_sensor
-          state: 43.0
-      - sensor.template.publish:
-          id: template_sensor
-          state: !lambda "return NAN;"
-  - platform: tsl2561
-    name: TSL2561 Ambient Light
-    address: 0x39
-    update_interval: 15s
-    is_cs_package: true
-    integration_time: 402ms
-    gain: 16x
-    i2c_id: i2c_bus
-  - platform: tsl2591
-    id: this_little_light_of_mine
-    address: 0x29
-    update_interval: 15s
-    integration_time: 600ms
-    gain: high
-    visible:
-      name: tsl2591 visible
-      id: tsl2591_vis
-      unit_of_measurement: pH
-    infrared:
-      name: tsl2591 infrared
-      id: tsl2591_ir
-    full_spectrum:
-      name: tsl2591 full_spectrum
-      id: tsl2591_fs
-    calculated_lux:
-      name: tsl2591 calculated_lux
-      id: tsl2591_cl
-    i2c_id: i2c_bus
-  - platform: veml3235
-    id: veml3235_sensor
-    name: VEML3235 Light Sensor
-    i2c_id: i2c_bus
-    auto_gain: true
-    auto_gain_threshold_high: 90%
-    auto_gain_threshold_low: 15%
-    digital_gain: 1X
-    gain: 1X
-    integration_time: 50ms
-  - platform: tee501
-    name: Office Temperature 3
-    address: 0x48
-    i2c_id: i2c_bus
-  - platform: ultrasonic
-    trigger_pin:
-      allow_other_uses: true
-      number: GPIO25
-    echo_pin:
-      number: GPIO23
-      allow_other_uses: true
-      inverted: true
-    name: Ultrasonic Sensor
-    timeout: 5.5m
-    id: ultrasonic_sensor1
-  - platform: uptime
-    name: Uptime Sensor
-  - id: !extend ${devicename}_uptime_pcg
-    unit_of_measurement: s
-  - platform: wifi_signal
-    name: WiFi Signal Sensor
-    update_interval: 15s
-  - platform: mqtt_subscribe
-    name: MQTT Subscribe Sensor 1
-    topic: mqtt/topic
-    id: the_sensor
-    qos: 2
-    on_value:
-      - mqtt.publish_json:
-          topic: the/topic
-          payload: |-
-            root["key"] = id(the_sensor).state;
-            root["greeting"] = "Hello World";
-  - platform: sds011
-    uart_id: uart_0
-    pm_2_5:
-      name: SDS011 PM2.5
-    pm_10_0:
-      name: SDS011 PM10.0
-    update_interval: 5min
-    rx_only: false
-  - platform: ccs811
-    eco2:
-      name: CCS811 eCO2
-    tvoc:
-      name: CCS811 TVOC
-    update_interval: 30s
-    baseline: 0x4242
-    i2c_id: i2c_bus
-  - platform: tx20
-    wind_speed:
-      name: Windspeed
-    wind_direction_degrees:
-      name: Winddirection Degrees
-    pin:
-      number: GPIO04
-      mode: INPUT
-      allow_other_uses: true
-  - platform: zyaura
-    clock_pin:
-      allow_other_uses: true
-      number: GPIO5
-    data_pin:
-      allow_other_uses: true
-      number: GPIO4
-    co2:
-      name: ZyAura CO2
-    temperature:
-      name: ZyAura Temperature
-    humidity:
-      name: ZyAura Humidity
-  - platform: as3935
-    lightning_energy:
-      name: Lightning Energy
-    distance:
-      name: Distance Storm
-  - platform: tmp117
-    name: TMP117 Temperature
-    update_interval: 5s
-    i2c_id: i2c_bus
-  - 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: CAQI
-    i2c_id: i2c_bus
-  - platform: teleinfo
-    tag_name: HCHC
-    name: hchc
-    unit_of_measurement: Wh
-    icon: mdi:flash
-    teleinfo_id: myteleinfo
-  - platform: mcp9808
-    name: MCP9808 Temperature
-    update_interval: 15s
-    i2c_id: i2c_bus
-  - platform: ezo
-    id: ph_ezo
-    address: 99
-    unit_of_measurement: pH
-    i2c_id: i2c_bus
-  - platform: sdp3x
-    name: HVAC Filter Pressure drop
-    id: filter_pressure
-    update_interval: 5s
-    accuracy_decimals: 3
-    i2c_id: i2c_bus
-  - platform: cs5460a
-    id: cs5460a1
-    current:
-      name: Socket current
-    voltage:
-      name: Mains voltage
-    power:
-      name: Socket power
-      on_value:
-        then:
-          cs5460a.restart: cs5460a1
-    samples: 1600
-    pga_gain: 10X
-    current_gain: 0.01
-    voltage_gain: 0.000573
-    current_hpf: true
-    voltage_hpf: true
-    phase_offset: 20
-    pulse_energy: 0.01 kWh
-    cs_pin:
-      mcp23xxx: mcp23017_hub
-      number: 14
-  - platform: max9611
-    i2c_id: i2c_bus
-    shunt_resistance: 0.2 ohm
-    gain: 1X
-    voltage:
-      name: Max9611 Voltage
-    current:
-      name: Max9611 Current
-    power:
-      name: Max9611 Watts
-    temperature:
-      name: Max9611 Temp
-    update_interval: 1s
-  - platform: mlx90614
-    i2c_id: i2c_bus
-    ambient:
-      name: Ambient
-    object:
-      name: Object
-      emissivity: 1.0
-  - platform: mpl3115a2
-    i2c_id: i2c_bus
-    temperature:
-      name: "MPL3115A2 Temperature"
-    pressure:
-      name: "MPL3115A2 Pressure"
-    update_interval: 10s
-  - platform: alpha3
-    ble_client_id: ble_foo
-    flow:
-      name: "Radiator Pump Flow"
-    head:
-      name: "Radiator Pump Head"
-    power:
-      name: "Radiator Pump Power"
-    speed:
-      name: "Radiator Pump Speed"
-  - platform: ld2410
-    light:
-      name: light
-    moving_distance:
-      name: "Moving distance (cm)"
-    still_distance:
-      name: "Still Distance (cm)"
-    moving_energy:
-      name: "Move Energy (%)"
-    still_energy:
-      name: "Still Energy (%)"
-    detection_distance:
-      name: "Distance Detection (cm)"
-    g0:
-      move_energy:
-        name: g0 move energy
-      still_energy:
-        name: g0 still energy
-    g1:
-      move_energy:
-        name: g1 move energy
-      still_energy:
-        name: g1 still energy
-    g2:
-      move_energy:
-        name: g2 move energy
-      still_energy:
-        name: g2 still energy
-    g3:
-      move_energy:
-        name: g3 move energy
-      still_energy:
-        name: g3 still energy
-    g4:
-      move_energy:
-        name: g4 move energy
-      still_energy:
-        name: g4 still energy
-    g5:
-      move_energy:
-        name: g5 move energy
-      still_energy:
-        name: g5 still energy
-    g6:
-      move_energy:
-        name: g6 move energy
-      still_energy:
-        name: g6 still energy
-    g7:
-      move_energy:
-        name: g7 move energy
-      still_energy:
-        name: g7 still energy
-    g8:
-      move_energy:
-        name: g8 move energy
-      still_energy:
-        name: g8 still energy
-
-  - platform: ld2420
-    moving_distance:
-      name: "Moving distance (cm)"
-  - platform: sen21231
-    name: "Person Sensor"
-    i2c_id: i2c_bus
-  - platform: fs3000
-    name: "Air Velocity"
-    model: 1005
-    update_interval: 60s
-    i2c_id: i2c_bus
-  - platform: absolute_humidity
-    name: DHT Absolute Humidity
-    temperature: dht_temperature
-    humidity: dht_humidity
-  - platform: hyt271
-    i2c_id: i2c_bus
-    temperature:
-      name: "Temperature hyt271"
-      id: temp_etuve
-    humidity:
-      name: "Humidity hyt271"
-  - platform: iaqcore
-    i2c_id: i2c_bus
-    co2:
-      name: "iAQ Core CO2 Sensor"
-    tvoc:
-      name: "iAQ Core TVOC Sensor"
-  - platform: tmp1075
-    name: "Temperature TMP1075"
-    update_interval: 10s
-    i2c_id: i2c_bus
-    conversion_rate: 27.5ms
-    alert:
-      limit_low: 50
-      limit_high: 75
-      fault_count: 1
-      polarity: active_high
-      function: comparator
-  - platform: zio_ultrasonic
-    name: "Distance"
-    update_interval: 60s
-    i2c_id: i2c_bus
-  - platform: bmp581
-    i2c_id: i2c_bus
-    temperature:
-      name: "BMP581 Temperature"
-      iir_filter: 2x
-    pressure:
-      name: "BMP581 Pressure"
-      oversampling: 128x
-  - platform: debug
-    free:
-      name: "Heap Free"
-    block:
-      name: "Heap Max Block"
-    loop_time:
-      name: "Loop Time"
-    psram:
-      name: "PSRAM Free"
-  - platform: mmc5983
-    i2c_id: i2c_bus
-    field_strength_x:
-      name: "Magnet X"
-      id: magnet_x
-    field_strength_y:
-      name: "Magnet Y"
-      id: magnet_y
-    field_strength_z:
-      name: "Magnet Z"
-      id: magnet_z
-  - platform: micronova
-    room_temperature:
-      name: Room Temperature
-    fumes_temperature:
-      name: Fumes Temperature
-    water_temperature:
-      name: Water temperature
-    water_pressure:
-      name: Water pressure
-    stove_power:
-      name: Stove Power
-    fan_speed:
-      fan_rpm_offset: 240
-      name: Fan RPM
-    memory_address_sensor:
-      memory_location: 0x20
-      memory_address: 0x7d
-      name: Adres sensor
-  - platform: ade7880
-    i2c_id: i2c_bus
-    irq0_pin:
-      number: GPIO13
-      allow_other_uses: true
-    irq1_pin:
-      number: GPIO5
-      allow_other_uses: true
-    reset_pin:
-      number: GPIO16
-      allow_other_uses: true
-    frequency: 60Hz
-    phase_a:
-      name: Channel A
-      voltage: Voltage
-      current: Current
-      active_power: Active Power
-      power_factor: Power Factor
-      forward_active_energy: Forward Active Energy
-      reverse_active_energy: Reverse Active Energy
-      calibration:
-        current_gain: 3116628
-        voltage_gain: -757178
-        power_gain: -1344457
-        phase_angle: 188
-    phase_b:
-      name: Channel B
-      voltage: Voltage
-      current: Current
-      active_power: Active Power
-      power_factor: Power Factor
-      forward_active_energy: Forward Active Energy
-      reverse_active_energy: Reverse Active Energy
-      calibration:
-        current_gain: 3133655
-        voltage_gain: -755235
-        power_gain: -1345638
-        phase_angle: 188
-    phase_c:
-      name: Channel C
-      voltage: Voltage
-      current: Current
-      active_power: Active Power
-      power_factor: Power Factor
-      forward_active_energy: Forward Active Energy
-      reverse_active_energy: Reverse Active Energy
-      calibration:
-        current_gain: 3111158
-        voltage_gain: -743813
-        power_gain: -1351437
-        phase_angle: 180
-    neutral:
-      name: Neutral
-      current: Current
-      calibration:
-        current_gain: 3189
-
-psram:
-
-esp32_touch:
-  setup_mode: false
-  iir_filter: 10ms
-  sleep_duration: 27ms
-  measurement_duration: 8ms
-  low_voltage_reference: 0.5V
-  high_voltage_reference: 2.7V
-  voltage_attenuation: 1.5V
-
-binary_sensor:
-  - platform: gpio
-    name: "MCP23S08 Pin #1"
-    pin:
-      mcp23xxx: mcp23s08_hub
-      # Use pin number 1
-      number: 1
-      # One of INPUT or INPUT_PULLUP
-      mode: INPUT_PULLUP
-      inverted: false
-  - platform: gpio
-    name: "MCP23S17 Pin #1"
-    pin:
-      mcp23xxx: mcp23s17_hub
-      # Use pin number 1
-      number: 1
-      allow_other_uses: true
-      # One of INPUT or INPUT_PULLUP
-      mode: INPUT_PULLUP
-      inverted: false
-  - platform: gpio
-    name: "MCP23S17 Pin #1 with interrupt"
-    pin:
-      mcp23xxx: mcp23s17_hub
-      # Use pin number 1
-      allow_other_uses: true
-      number: 1
-      # One of INPUT or INPUT_PULLUP
-      mode: INPUT_PULLUP
-      inverted: false
-      interrupt: FALLING
-  - platform: gpio
-    pin:
-      allow_other_uses: true
-      number: GPIO9
-    name: Living Room Window
-    device_class: window
-    filters:
-      - invert:
-      - delayed_on_off: 40ms
-      - delayed_on_off:
-          time_on: 10s
-          time_off: !lambda "return 1000;"
-      - delayed_on: 40ms
-      - delayed_off: 40ms
-      - delayed_on_off: !lambda "return 10;"
-      - delayed_on: !lambda "return 1000;"
-      - delayed_off: !lambda "return 0;"
-      - settle: 40ms
-      - settle: !lambda "return 10;"
-    on_press:
-      then:
-        - lambda: >-
-            ESP_LOGD("main", "Pressed");
-    on_release:
-      then:
-        - lambda: >-
-            ESP_LOGD("main", "Released");
-    on_click:
-      - min_length: 50ms
-        max_length: 350ms
-        then:
-          - lambda: >-
-              ESP_LOGD("main", "Clicked");
-      - then:
-          - lambda: >-
-              ESP_LOGD("main", "Clicked");
-    on_double_click:
-      - min_length: 50ms
-        max_length: 350ms
-        then:
-          - lambda: >-
-              ESP_LOGD("main", "Double Clicked");
-      - then:
-          - lambda: >-
-              ESP_LOGD("main", "Double Clicked");
-    on_multi_click:
-      - timing:
-          - ON for at most 1s
-          - OFF for at most 1s
-          - ON for at most 1s
-          - OFF for at least 0.2s
-        then:
-          - logger.log:
-              format: Multi Clicked TWO
-              level: warn
-      - timing:
-          - OFF for 1s to 2s
-          - ON for 1s to 2s
-          - OFF for at least 0.5s
-        then:
-          - logger.log:
-              format: Multi Clicked LONG SINGLE
-              level: warn
-      - timing:
-          - ON for at most 1s
-          - OFF for at least 0.5s
-        then:
-          - logger.log:
-              format: Multi Clicked SINGLE
-              level: warn
-    id: binary_sensor1
-  - platform: gpio
-    pin:
-      number: GPIO9
-      allow_other_uses: true
-      mode: INPUT_PULLUP
-    name: Living Room Window 2
-  - platform: gpio
-    pin:
-      number: GPIO9
-      allow_other_uses: true
-      mode: INPUT_OUTPUT_OPEN_DRAIN
-    name: Living Room Button
-  - platform: status
-    name: Living Room Status
-  - platform: esp32_touch
-    name: ESP32 Touch Pad GPIO27
-    pin: GPIO27
-    threshold: 1000
-    id: btn_left
-    on_press:
-      - if:
-          condition:
-            display_menu.is_active: test_lcd_menu
-          then:
-            - display_menu.enter: test_lcd_menu
-          else:
-            - display_menu.left: test_lcd_menu
-            - display_menu.right: test_lcd_menu
-            - display_menu.show: test_lcd_menu
-      - if:
-          condition:
-            display_menu.is_active: test_graphical_display_menu
-          then:
-            - display_menu.enter: test_graphical_display_menu
-          else:
-            - display_menu.left: test_graphical_display_menu
-            - display_menu.right: test_graphical_display_menu
-            - display_menu.show: test_graphical_display_menu
-  - platform: template
-    name: Garage Door Open
-    id: garage_door
-    lambda: |-
-      if (isnan(id(${sensorname}_sensor).state)) {
-        // isnan checks if the ultrasonic sensor echo
-        // has timed out, resulting in a NaN (not a number) state
-        // in that case, return {} to indicate that we don't know.
-        return {};
-      } else if (id(${sensorname}_sensor).state > 30) {
-        // Garage Door is open.
-        return true;
-      } else {
-        // Garage Door is closed.
-        return false;
-      }
-    on_press:
-      - binary_sensor.template.publish:
-          id: garage_door
-          state: false
-      - output.ledc.set_frequency:
-          id: gpio_19
-          frequency: 500.0Hz
-      - output.ledc.set_frequency:
-          id: gpio_19
-          frequency: !lambda "return 500.0;"
-  - platform: pn532
-    pn532_id: pn532_bs
-    uid: 74-10-37-94
-    name: PN532 NFC Tag
-  - platform: rdm6300
-    uid: 7616525
-    name: RDM6300 NFC Tag
-  - platform: gpio
-    name: PCF binary sensor
-    pin:
-      pcf8574: pcf8574_hub
-      number: 1
-      mode: INPUT
-      inverted: true
-  - platform: gpio
-    name: PCA9554 binary sensor
-    pin:
-      pca9554: pca9554_hub
-      number: 1
-      mode: INPUT
-      inverted: true
-  - platform: gpio
-    name: PCA6416A binary sensor
-    pin:
-      pca6416a: pca6416a_hub
-      number: 15
-      mode: INPUT
-      inverted: true
-  - platform: gpio
-    name: MCP21 binary sensor
-    pin:
-      mcp23xxx: mcp23017_hub
-      number: 1
-      allow_other_uses: true
-      mode: INPUT
-      inverted: true
-  - platform: gpio
-    name: MCP22 binary sensor
-    pin:
-      mcp23xxx: mcp23008_hub
-      number: 7
-      mode: INPUT_PULLUP
-      inverted: false
-  - platform: gpio
-    name: MCP23 binary sensor
-    pin:
-      mcp23016: mcp23016_hub
-      number: 7
-      mode: INPUT
-      inverted: false
-  - platform: gpio
-    name: Speed Fan Cycle binary sensor"
-    pin:
-      number: 18
-      allow_other_uses: true
-      mode:
-        input: true
-        pulldown: true
-    on_press:
-      - fan.cycle_speed:
-          id: fan_speed
-          off_speed_cycle: false
-      - logger.log: "Cycle speed clicked"
-  - platform: remote_receiver
-    name: Raw Remote Receiver Test
-    raw:
-      code:
-        [
-          5685,
-          -4252,
-          1711,
-          -2265,
-          1712,
-          -2265,
-          1711,
-          -2264,
-          1712,
-          -2266,
-          3700,
-          -2263,
-          1712,
-          -4254,
-          1711,
-          -4249,
-          1715,
-          -2266,
-          1710,
-          -2267,
-          1709,
-          -2265,
-          3704,
-          -4250,
-          1712,
-          -4254,
-          3700,
-          -2260,
-          1714,
-          -2265,
-          1712,
-          -2262,
-          1714,
-          -2267,
-          1709,
-        ]
-  - platform: remote_receiver
-    name: Coolix Test 1
-    coolix: 0xB21F98
-  - platform: remote_receiver
-    name: Coolix Test 2
-    coolix:
-      first: 0xB2E003
-  - platform: remote_receiver
-    name: Coolix Test 3
-    coolix:
-      first: 0xB2E003
-      second: 0xB21F98
-  - platform: as3935
-    name: Storm Alert
-  - platform: analog_threshold
-    name: Analog Trheshold 1
-    sensor_id: template_sensor
-    threshold:
-      upper: 110
-      lower: 90
-    filters:
-      - delayed_on: 0s
-      - delayed_off: 10s
-  - platform: analog_threshold
-    name: Analog Trheshold 2
-    sensor_id: template_sensor
-    threshold: 100
-    filters:
-      - invert:
-  - platform: template
-    id: open_endstop_sensor
-  - platform: template
-    id: open_sensor
-  - platform: template
-    id: open_obstacle_sensor
-
-  - platform: template
-    id: close_endstop_sensor
-  - platform: template
-    id: close_sensor
-  - platform: template
-    id: close_obstacle_sensor
-  - platform: ld2410
-    has_target:
-      name: presence
-    has_moving_target:
-      name: movement
-    has_still_target:
-      name: still
-    out_pin_presence_status:
-      name: out pin presence status
-  - platform: qwiic_pir
-    i2c_id: i2c_bus
-    name: "Qwiic PIR Motion Sensor"
-  - platform: dfrobot_sen0395
-    id: mmwave_detected_uart
-    dfrobot_sen0395_id: mmwave
-  - platform: nfc
-    nfcc_id: nfcc_pn7160_i2c
-    ndef_contains: pulse
-    name: MFC Tag 1
-  - platform: nfc
-    nfcc_id: nfcc_pn7160_i2c
-    tag_id: pulse
-    name: MFC Tag 2
-  - platform: nfc
-    nfcc_id: nfcc_pn7160_i2c
-    uid: 59-FC-AB-15
-    name: MFC Tag 3
-
-pca9685:
-  frequency: 500
-  address: 0x0
-  i2c_id: i2c_bus
-
-tlc59208f:
-  - address: 0x20
-    id: tlc59208f_1
-    i2c_id: i2c_bus
-  - address: 0x22
-    id: tlc59208f_2
-    i2c_id: i2c_bus
-  - address: 0x24
-    id: tlc59208f_3
-    i2c_id: i2c_bus
-
-my9231:
-  data_pin:
-    allow_other_uses: true
-    number: GPIO12
-  clock_pin:
-    allow_other_uses: true
-    number: GPIO14
-  num_channels: 6
-  num_chips: 2
-  bit_depth: 16
-
-sm2235:
-  data_pin:
-    allow_other_uses: true
-    number: GPIO4
-  clock_pin:
-    allow_other_uses: true
-    number: GPIO5
-  max_power_color_channels: 9
-  max_power_white_channels: 9
-
-sm2335:
-  data_pin:
-    allow_other_uses: true
-    number: GPIO4
-  clock_pin:
-    allow_other_uses: true
-    number: GPIO5
-  max_power_color_channels: 9
-  max_power_white_channels: 9
-
-bp1658cj:
-  data_pin:
-    allow_other_uses: true
-    number: GPIO3
-  clock_pin:
-    allow_other_uses: true
-    number: GPIO5
-  max_power_color_channels: 4
-  max_power_white_channels: 6
-
-bp5758d:
-  data_pin:
-    allow_other_uses: true
-    number: GPIO3
-  clock_pin:
-    allow_other_uses: true
-    number: GPIO5
-
-output:
-  - platform: gpio
-    pin:
-      allow_other_uses: true
-      number: GPIO26
-    id: gpio_26
-    power_supply: atx_power_supply
-    inverted: false
-  - platform: ledc
-    pin:
-      allow_other_uses: true
-      number: 19
-    id: gpio_19
-    frequency: 1500Hz
-    channel: 14
-    max_power: 0.5
-  - platform: pca9685
-    id: pca_0
-    channel: 0
-  - platform: pca9685
-    id: pca_1
-    channel: 1
-  - platform: pca9685
-    id: pca_2
-    channel: 2
-  - platform: pca9685
-    id: pca_3
-    channel: 3
-  - platform: pca9685
-    id: pca_4
-    channel: 4
-  - platform: pca9685
-    id: pca_5
-    channel: 5
-  - platform: pca9685
-    id: pca_6
-    channel: 6
-  - platform: pca9685
-    id: pca_7
-    channel: 7
-  - platform: tlc59208f
-    id: tlc_0
-    channel: 0
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_1
-    channel: 1
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_2
-    channel: 2
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_3
-    channel: 0
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_4
-    channel: 1
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_5
-    channel: 2
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_6
-    channel: 0
-    tlc59208f_id: tlc59208f_3
-  - platform: tlc59208f
-    id: tlc_7
-    channel: 1
-    tlc59208f_id: tlc59208f_3
-  - platform: tlc59208f
-    id: tlc_8
-    channel: 2
-    tlc59208f_id: tlc59208f_3
-  - platform: gpio
-    id: id2
-    pin:
-      pcf8574: pcf8574_hub
-      number: 0
-      # allow_other_uses: true
-      mode: OUTPUT
-      inverted: false
-  - platform: gpio
-    id: id26
-    pin:
-      pca9554: pca9554_hub
-      number: 0
-      # allow_other_uses: true
-      mode: OUTPUT
-      inverted: false
-  - platform: gpio
-    id: id22
-    pin:
-      mcp23xxx: mcp23017_hub
-      number: 0
-      mode: OUTPUT
-      inverted: false
-  - platform: gpio
-    id: id23
-    pin:
-      mcp23xxx: mcp23008_hub
-      number: 0
-      mode: OUTPUT
-      inverted: false
-  - platform: gpio
-    id: id25
-    pin:
-      mcp23016: mcp23016_hub
-      number: 0
-      mode: OUTPUT
-      inverted: false
-  - platform: my9231
-    id: my_0
-    channel: 0
-  - platform: my9231
-    id: my_1
-    channel: 1
-  - platform: my9231
-    id: my_2
-    channel: 2
-  - platform: my9231
-    id: my_3
-    channel: 3
-  - platform: my9231
-    id: my_4
-    channel: 4
-  - platform: my9231
-    id: my_5
-    channel: 5
-  - platform: sm2235
-    id: sm2235_red
-    channel: 1
-  - platform: sm2235
-    id: sm2235_green
-    channel: 0
-  - platform: sm2235
-    id: sm2235_blue
-    channel: 2
-  - platform: sm2235
-    id: sm2235_coldwhite
-    channel: 4
-  - platform: sm2235
-    id: sm2235_warmwhite
-    channel: 3
-  - platform: sm2335
-    id: sm2335_red
-    channel: 1
-  - platform: sm2335
-    id: sm2335_green
-    channel: 0
-  - platform: sm2335
-    id: sm2335_blue
-    channel: 2
-  - platform: sm2335
-    id: sm2335_coldwhite
-    channel: 4
-  - platform: sm2335
-    id: sm2335_warmwhite
-    channel: 3
-  - platform: slow_pwm
-    id: id24
-    pin:
-      allow_other_uses: true
-      number: GPIO26
-    period: 15s
-  - platform: ac_dimmer
-    id: dimmer1
-    gate_pin:
-      allow_other_uses: true
-      number: GPIO5
-    zero_cross_pin:
-      allow_other_uses: true
-      number: GPIO26
-  - platform: esp32_dac
-    pin:
-      allow_other_uses: true
-      number: GPIO25
-    id: dac_output
-  - platform: mcp4725
-    id: mcp4725_dac_output
-    i2c_id: i2c_bus
-  - platform: mcp4728
-    id: mcp4728_dac_output_a
-    channel: A
-    vref: vdd
-    power_down: normal
-  - platform: mcp4728
-    id: mcp4728_dac_output_b
-    channel: B
-    vref: internal
-    gain: X1
-    power_down: gnd_1k
-  - platform: mcp4728
-    id: mcp4728_dac_output_c
-    channel: C
-    vref: vdd
-    power_down: gnd_100k
-  - platform: mcp4728
-    id: mcp4728_dac_output_d
-    channel: D
-    vref: internal
-    gain: X2
-    power_down: gnd_500k
-  - platform: bp1658cj
-    id: bp1658cj_red
-    channel: 1
-  - platform: bp1658cj
-    id: bp1658cj_green
-    channel: 2
-  - platform: bp1658cj
-    id: bp1658cj_blue
-    channel: 0
-  - platform: bp1658cj
-    id: bp1658cj_coldwhite
-    channel: 3
-  - platform: bp1658cj
-    id: bp1658cj_warmwhite
-    channel: 4
-  - platform: bp5758d
-    id: bp5758d_red
-    channel: 2
-    current: 10
-  - platform: bp5758d
-    id: bp5758d_green
-    channel: 3
-    current: 10
-  - platform: bp5758d
-    id: bp5758d_blue
-    channel: 1
-    current: 10
-  - platform: bp5758d
-    id: bp5758d_coldwhite
-    channel: 5
-    current: 10
-  - platform: bp5758d
-    id: bp5758d_warmwhite
-    channel: 4
-    current: 10
-  - platform: x9c
-    id: test_x9c
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO25
-    inc_pin:
-      allow_other_uses: true
-      number: GPIO26
-    ud_pin:
-      allow_other_uses: true
-      number: GPIO27
-    initial_value: 0.5
-
-light:
-  - platform: binary
-    name: Desk Lamp
-    output: gpio_26
-    effects:
-      - strobe:
-      - strobe:
-          name: My Strobe
-          colors:
-            - state: true
-              duration: 250ms
-            - state: false
-              duration: 250ms
-    on_turn_on:
-      - switch.template.publish:
-          id: livingroom_lights
-          state: true
-    on_turn_off:
-      - switch.template.publish:
-          id: livingroom_lights
-          state: true
-  - platform: monochromatic
-    name: Kitchen Lights
-    id: kitchen
-    output: gpio_19
-    gamma_correct: 2.8
-    default_transition_length: 2s
-    effects:
-      - strobe:
-      - flicker:
-      - flicker:
-          name: My Flicker
-          alpha: 98%
-          intensity: 1.5%
-      - lambda:
-          name: My Custom Effect
-          update_interval: 1s
-          lambda: |-
-            static int state = 0;
-            state += 1;
-            if (state == 4)
-              state = 0;
-      - pulse:
-          transition_length: 10s
-          update_interval: 20s
-          min_brightness: 10%
-          max_brightness: 90%
-      - pulse:
-          name: pulse2
-          transition_length:
-            on_length: 10s
-            off_length: 5s
-          update_interval: 15s
-          min_brightness: 10%
-          max_brightness: 90%
-
-  - platform: rgb
-    name: Living Room Lights
-    id: ${roomname}_lights
-    red: pca_0
-    green: pca_1
-    blue: pca_2
-  - platform: rgbw
-    name: Living Room Lights 2
-    red: pca_3
-    green: pca_4
-    blue: pca_5
-    white: pca_6
-    color_interlock: true
-  - platform: rgbww
-    name: Living Room Lights 2
-    red: pca_3
-    green: pca_4
-    blue: pca_5
-    cold_white: pca_6
-    warm_white: pca_6
-    cold_white_color_temperature: 153 mireds
-    warm_white_color_temperature: 500 mireds
-    color_interlock: true
-  - platform: rgbct
-    name: Living Room Lights 2
-    red: pca_3
-    green: pca_4
-    blue: pca_5
-    color_temperature: pca_6
-    white_brightness: pca_6
-    cold_white_color_temperature: 153 mireds
-    warm_white_color_temperature: 500 mireds
-    color_interlock: true
-  - platform: cwww
-    name: Living Room Lights 2
-    cold_white: pca_6
-    warm_white: pca_6
-    cold_white_color_temperature: 153 mireds
-    warm_white_color_temperature: 500 mireds
-    constant_brightness: true
-  - platform: color_temperature
-    name: Living Room Lights 2
-    color_temperature: pca_6
-    brightness: pca_6
-    cold_white_color_temperature: 153 mireds
-    warm_white_color_temperature: 500 mireds
-
-remote_transmitter:
-  - pin:
-      allow_other_uses: true
-      number: 32
-    carrier_duty_percent: 100%
-
-climate:
-  - platform: tcl112
-    name: TCL112 Climate With Sensor
-    supports_heat: true
-    supports_cool: true
-    sensor: ${sensorname}_sensor
-  - platform: tcl112
-    name: TCL112 Climate
-    action_state_topic: action/state/topic
-    away_command_topic: away/command/topic
-    away_state_topic: away/state/topic
-    current_temperature_state_topic: current/temperature/state/topic
-    fan_mode_command_topic: fan_mode/mode/command/topic
-    fan_mode_state_topic: fan_mode/mode/state/topic
-    mode_command_topic: mode/command/topic
-    mode_state_topic: mode/state/topic
-    swing_mode_command_topic: swing_mode/command/topic
-    swing_mode_state_topic: swing_mode/state/topic
-    target_temperature_command_topic: target/temperature/command/topic
-    target_temperature_high_command_topic: target/temperature/high/command/topic
-    target_temperature_high_state_topic: target/temperature/high/state/topic
-    target_temperature_low_command_topic: target/temperature/low/command/topic
-    target_temperature_low_state_topic: target/temperature/low/state/topic
-    target_temperature_state_topic: target/temperature/state/topic
-  - platform: coolix
-    name: Coolix Climate With Sensor
-    supports_heat: true
-    supports_cool: true
-    sensor: ${sensorname}_sensor
-  - platform: coolix
-    name: Coolix Climate
-  - platform: fujitsu_general
-    name: Fujitsu General Climate
-  - platform: daikin
-    name: Daikin Climate
-  - platform: daikin_brc
-    name: Daikin BRC Climate
-    use_fahrenheit: true
-  - platform: delonghi
-    name: Delonghi Climate
-  - platform: yashima
-    name: Yashima Climate
-  - platform: mitsubishi
-    name: Mitsubishi
-    supports_dry: "true"
-    supports_fan_only: "true"
-    horizontal_default: "left"
-    vertical_default: "down"
-  - platform: whirlpool
-    name: Whirlpool Climate
-  - platform: climate_ir_lg
-    name: LG Climate
-  - platform: toshiba
-    name: Toshiba Climate
-  - platform: hitachi_ac344
-    name: Hitachi Climate
-  - platform: heatpumpir
-    protocol: mitsubishi_heavy_zm
-    horizontal_default: left
-    vertical_default: up
-    name: HeatpumpIR Climate
-    min_temperature: 18
-    max_temperature: 30
-  - platform: heatpumpir
-    protocol: greeyt
-    horizontal_default: left
-    vertical_default: up
-    name: HeatpumpIR Climate
-    min_temperature: 18
-    max_temperature: 30
-  - platform: midea_ir
-    name: Midea IR
-    use_fahrenheit: true
-  - platform: midea
-    on_control:
-      - logger.log: Control message received!
-      - lambda: |-
-          x.set_mode(CLIMATE_MODE_FAN_ONLY);
-    on_state:
-      - logger.log: State changed!
-      - lambda: |-
-          if (x.mode == CLIMATE_MODE_FAN_ONLY)
-            id(binary_sensor1).publish_state(true);
-    id: midea_unit
-    uart_id: uart_0
-    name: Midea Climate
-    transmitter_id:
-    period: 1s
-    num_attempts: 5
-    timeout: 2s
-    beeper: false
-    autoconf: true
-    visual:
-      min_temperature: 17 °C
-      max_temperature: 30 °C
-      temperature_step: 0.5 °C
-    supported_modes:
-      - FAN_ONLY
-      - HEAT_COOL
-      - COOL
-      - HEAT
-      - DRY
-    custom_fan_modes:
-      - SILENT
-      - TURBO
-    supported_presets:
-      - ECO
-      - BOOST
-      - SLEEP
-    custom_presets:
-      - FREEZE_PROTECTION
-    supported_swing_modes:
-      - VERTICAL
-      - HORIZONTAL
-      - BOTH
-    outdoor_temperature:
-      name: Temp
-    power_usage:
-      name: Power
-    humidity_setpoint:
-      name: Humidity
-  - platform: anova
-    name: Anova cooker
-    ble_client_id: ble_blah
-    unit_of_measurement: c
-    icon: mdi:stove
-  - platform: bedjet
-    name: My Bedjet
-    bedjet_id: my_bedjet_client
-    heat_mode: extended
-  - platform: whynter
-    name: Whynter
-  - platform: noblex
-    name: AC Living
-    id: noblex_ac
-    sensor: ${sensorname}_sensor
-    receiver_id: rcvr
-  - platform: gree
-    name: GREE
-    model: generic
-  - platform: zhlt01
-    name: ZH/LT-01 Climate
-
-script:
-  - id: climate_custom
-    then:
-      - climate.control:
-          id: midea_unit
-          custom_preset: FREEZE_PROTECTION
-          custom_fan_mode: SILENT
-  - id: climate_preset
-    then:
-      - climate.control:
-          id: midea_unit
-          preset: SLEEP
-
-switch:
-  - platform: template
-    name: MIDEA_AC_BEEPER_CONTROL
-    optimistic: true
-    turn_on_action:
-      midea_ac.beeper_on:
-    turn_off_action:
-      midea_ac.beeper_off:
-  - platform: template
-    name: MIDEA_RAW
-    turn_on_action:
-      - remote_transmitter.transmit_coolix:
-          first: 0xB21F98
-      - remote_transmitter.transmit_coolix:
-          first: 0xB21F98
-          second: 0xB21F98
-      - remote_transmitter.transmit_coolix:
-          first: !lambda "return 0xB21F98;"
-          second: !lambda "return 0xB21F98;"
-      - remote_transmitter.transmit_midea:
-          code: [0xA2, 0x08, 0xFF, 0xFF, 0xFF]
-      - remote_transmitter.transmit_midea:
-          code: !lambda "return {0xA2, 0x08, 0xFF, 0xFF, 0xFF};"
-  - platform: gpio
-    name: "MCP23S08 Pin #0"
-    pin:
-      mcp23xxx: mcp23s08_hub
-      # Use pin number 0
-      number: 0
-      mode: OUTPUT
-      inverted: false
-  - platform: gpio
-    name: "MCP23S17 Pin #0"
-    pin:
-      mcp23xxx: mcp23s17_hub
-      # Use pin number 0
-      number: 1
-      allow_other_uses: true
-      mode: OUTPUT
-      inverted: false
-  - platform: gpio
-    pin:
-      allow_other_uses: true
-      number: GPIO25
-    name: Living Room Dehumidifier
-    icon: "mdi:restart"
-    inverted: true
-    command_topic: custom_command_topic
-    command_retain: true
-    restore_mode: ALWAYS_OFF
-  - platform: template
-    name: JVC Off
-    id: living_room_lights_on
-    turn_on_action:
-      remote_transmitter.transmit_jvc:
-        data: 0x10EF
-  - platform: template
-    name: MagiQuest
-    turn_on_action:
-      remote_transmitter.transmit_magiquest:
-        wand_id: 0x01234567
-  - platform: template
-    name: NEC
-    id: living_room_lights_off
-    turn_on_action:
-      remote_transmitter.transmit_nec:
-        address: 0x4242
-        command: 0x8484
-  - platform: template
-    name: LG
-    turn_on_action:
-      remote_transmitter.transmit_lg:
-        data: 4294967295
-        nbits: 28
-  - platform: template
-    name: Samsung
-    turn_on_action:
-      remote_transmitter.transmit_samsung:
-        data: 0xABCDEF
-  - platform: template
-    name: Samsung36
-    turn_on_action:
-      remote_transmitter.transmit_samsung36:
-        address: 0x0400
-        command: 0x000E00FF
-  - platform: template
-    name: ToshibaAC
-    turn_on_action:
-      - remote_transmitter.transmit_toshiba_ac:
-          rc_code_1: 0xB24DBF4050AF
-          rc_code_2: 0xD5660001003C
-  - platform: template
-    name: Sony
-    turn_on_action:
-      remote_transmitter.transmit_sony:
-        data: 0xABCDEF
-        nbits: 12
-  - platform: template
-    name: Panasonic
-    turn_on_action:
-      remote_transmitter.transmit_panasonic:
-        address: 0x4004
-        command: 0x1000BCD
-  - platform: template
-    name: Pioneer
-    turn_on_action:
-      - remote_transmitter.transmit_pioneer:
-          rc_code_1: 0xA556
-          rc_code_2: 0xA506
-          repeat:
-            times: 2
-  - platform: template
-    name: RC Switch Raw
-    turn_on_action:
-      remote_transmitter.transmit_rc_switch_raw:
-        code: "00101001100111110101xxxx"
-        protocol: 1
-  - platform: template
-    name: RC Switch Type A
-    turn_on_action:
-      remote_transmitter.transmit_rc_switch_type_a:
-        group: "11001"
-        device: "01000"
-        state: true
-        protocol:
-          pulse_length: 175
-          sync: [1, 31]
-          zero: [1, 3]
-          one: [3, 1]
-          inverted: false
-  - platform: template
-    name: RC Switch Type B
-    turn_on_action:
-      remote_transmitter.transmit_rc_switch_type_b:
-        address: 4
-        channel: 2
-        state: true
-  - platform: template
-    name: RC Switch Type C
-    turn_on_action:
-      remote_transmitter.transmit_rc_switch_type_c:
-        family: "a"
-        group: 1
-        device: 2
-        state: true
-  - platform: template
-    name: RC Switch Type D
-    turn_on_action:
-      remote_transmitter.transmit_rc_switch_type_d:
-        group: "a"
-        device: 2
-        state: true
-  - platform: template
-    name: RC5
-    turn_on_action:
-      remote_transmitter.transmit_rc5:
-        address: 0x00
-        command: 0x0B
-  - platform: template
-    name: RC5
-    turn_on_action:
-      remote_transmitter.transmit_raw:
-        code: [1000, -1000]
-  - platform: template
-    name: AEHA
-    id: eaha_hitachi_climate_power_on
-    turn_on_action:
-      remote_transmitter.transmit_aeha:
-        address: 0x8008
-        carrier_frequency: 36700Hz
-        data:
-          [
-            0x00,
-            0x02,
-            0xFD,
-            0xFF,
-            0x00,
-            0x33,
-            0xCC,
-            0x49,
-            0xB6,
-            0xC8,
-            0x37,
-            0x16,
-            0xE9,
-            0x00,
-            0xFF,
-            0x00,
-            0xFF,
-            0x00,
-            0xFF,
-            0x00,
-            0xFF,
-            0x00,
-            0xFF,
-            0xCA,
-            0x35,
-            0x8F,
-            0x70,
-            0x00,
-            0xFF,
-            0x00,
-            0xFF,
-            0x00,
-            0xFF,
-            0x00,
-            0xFF,
-          ]
-  - platform: template
-    name: Haier
-    turn_on_action:
-      remote_transmitter.transmit_haier:
-        code:
-          [
-            0xA6,
-            0xDA,
-            0x00,
-            0x00,
-            0x40,
-            0x40,
-            0x00,
-            0x80,
-            0x00,
-            0x00,
-            0x00,
-            0x00,
-            0x05,
-          ]
-  - platform: template
-    name: Living Room Lights
-    id: livingroom_lights
-    optimistic: true
-    assumed_state: true
-    turn_on_action:
-      - switch.turn_on: living_room_lights_on
-      - output.set_level:
-          id: gpio_19
-          level: 50%
-      - output.set_level:
-          id: gpio_19
-          level: !lambda "return 0.5;"
-      - output.set_level:
-          id: dac_output
-          level: 50%
-      - output.set_level:
-          id: dac_output
-          level: !lambda "return 0.5;"
-      - output.set_level:
-          id: mcp4725_dac_output
-          level: !lambda "return 0.5;"
-      - output.set_level:
-          id: mcp4728_dac_output_a
-          level: !lambda "return 0.5;"
-    turn_off_action:
-      - switch.turn_on: living_room_lights_off
-    on_turn_on:
-      - switch.template.publish:
-          id: livingroom_lights
-          state: true
-  - platform: restart
-    name: Living Room Restart
-  - platform: safe_mode
-    name: Living Room Restart (Safe Mode)
-  - platform: factory_reset
-    name: Living Room Restart (Factory Default Settings)
-  - platform: shutdown
-    name: Living Room Shutdown
-  - platform: output
-    name: Generic Output
-    output: pca_6
-  - platform: template
-    name: Template Switch
-    id: my_switch
-    lambda: |-
-      if (id(binary_sensor1).state) {
-        return true;
-      } else {
-        return {};
-      }
-      id(my_switch).publish_state(false);
-      id(my_switch).publish_state(true);
-      if (id(my_switch).state) {
-        // Switch is ON, do something here
-        id(my_switch).turn_off();
-        id(my_switch).turn_on();
-      } else {
-        // Switch is OFF, do something else here
-      }
-    optimistic: true
-    assumed_state: false
-    on_turn_off:
-      - switch.template.publish:
-          id: my_switch
-          state: !lambda "return false;"
-  - platform: uart
-    uart_id: uart_0
-    name: UART String Output
-    data: DataToSend
-  - platform: uart
-    uart_id: uart_0
-    name: UART Bytes Output
-    data: [0xDE, 0xAD, 0xBE, 0xEF]
-  - platform: uart
-    uart_id: uart_0
-    name: UART Recurring Output
-    data: [0xDE, 0xAD, 0xBE, 0xEF]
-    send_every: 1s
-  - platform: uart
-    uart_id: uart_0
-    name: "UART On/Off"
-    data:
-      turn_on: "TurnOn\r\n"
-      turn_off: "TurnOff\r\n"
-  - platform: template
-    assumed_state: true
-    name: Stepper Switch
-    turn_on_action:
-      - stepper.set_target:
-          id: my_stepper
-          target: !lambda |-
-            static int32_t i = 0;
-            i += 1000;
-            if (i > 5000) {
-              i = -5000;
-            }
-            return i;
-      - stepper.report_position:
-          id: my_stepper
-          position: 0
-
-  - platform: gpio
-    name: "SN74HC595 Pin #0"
-    pin:
-      sn74hc595: sn74hc595_hub_2
-      # Use pin number 0
-      number: 0
-      inverted: false
-  - platform: template
-    id: ble1_status
-    optimistic: true
-  - platform: template
-    id: outlet_switch
-    optimistic: true
-    device_class: outlet
-  - platform: ld2410
-    engineering_mode:
-      name: "control ld2410 engineering mode"
-    bluetooth:
-      name: "control ld2410 bluetooth"
-  - platform: micronova
-    stove:
-      name: Stove on/off
-
-fan:
-  - platform: binary
-    output: gpio_26
-    name: Living Room Fan 1
-    oscillation_output: gpio_19
-    direction_output: gpio_26
-  - platform: speed
-    id: fan_speed
-    icon: mdi:weather-windy
-    output: pca_6
-    speed_count: 10
-    name: Living Room Fan 2
-    oscillation_output: gpio_19
-    direction_output: gpio_26
-    oscillation_state_topic: oscillation/state/topic
-    oscillation_command_topic: oscillation/command/topic
-    speed_level_state_topic: speed_level/state/topic
-    speed_level_command_topic: speed_level/command/topic
-    speed_state_topic: speed/state/topic
-    speed_command_topic: speed/command/topic
-    on_speed_set:
-      then:
-        - logger.log: Fan speed was changed!
-  - platform: speed
-    id: fan_speed_presets
-    icon: mdi:weather-windy
-    output: pca_6
-    speed_count: 10
-    name: Speed Fan w/ Presets
-    oscillation_output: gpio_19
-    direction_output: gpio_26
-    preset_modes:
-      - Preset 1
-      - Preset 2
-    on_preset_set:
-      then:
-        - logger.log: Preset mode was changed!
-  - platform: hbridge
-    id: fan_hbridge_presets
-    icon: mdi:weather-windy
-    speed_count: 4
-    name: H-bridge Fan w/ Presets
-    pin_a: pca_6
-    pin_b: pca_7
-    preset_modes:
-      - Preset 1
-      - Preset 2
-    on_preset_set:
-      then:
-        - logger.log: Preset mode was changed!
-  - platform: bedjet
-    name: My Bedjet fan
-    bedjet_id: my_bedjet_client
-  - platform: copy
-    source_id: fan_speed
-    name: Fan Speed Copy
-
-interval:
-  - interval: 10s
-    then:
-      - display.page.show: !lambda |-
-          if (true) return id(page1); else return id(page2);
-      - display.page.show_next: display1
-      - display.page.show_previous: display1
-  - interval: 2s
-    then:
-      # yamllint disable rule:line-length
-      - lambda: |-
-          static uint16_t btn_left_state = id(btn_left)->get_value();
-
-          ESP_LOGD("adaptive touch", "___  Touch Pad '%s' (T%u): val: %u state: %u tres:%u", id(btn_left)->get_name().c_str(), id(btn_left)->get_touch_pad(), id(btn_left)->get_value(), btn_left_state, id(btn_left)->get_threshold());
-
-          btn_left_state = ((uint32_t) id(btn_left)->get_value()  +  63 * (uint32_t)btn_left_state) >> 6;
-
-          id(btn_left)->set_threshold(btn_left_state * 0.9);
-      # yamllint enable rule:line-length
-      - if:
-          condition:
-            display.is_displaying_page:
-              id: display1
-              page_id: page1
-          then:
-            - logger.log: Seeing page 1
-  - interval: 60min
-    then:
-      - ble_client.connect: ble_blah
-      - ble_client.ble_write:
-          id: ble_blah
-          service_uuid: EBE0CCB0-7A0A-4B0C-8A1A-6FF2997DA3A6
-          characteristic_uuid: EBE0CCB7-7A0A-4B0C-8A1A-6FF2997DA3A6
-          value: !lambda |-
-            return {1, 0};
-      - ble_client.disconnect: ble_blah
-
-color:
-  - id: kbx_red
-    red: 100%
-    green_int: 123
-    blue: 2%
-  - id: kbx_blue
-    red: 0%
-    green: 1%
-    blue: 100%
-  - id: kbx_green
-    hex: "3DEC55"
-
-display:
-  - platform: lcd_gpio
-    id: my_lcd_gpio
-    dimensions: 18x4
-    data_pins:
-      - allow_other_uses: true
-        number: GPIO19
-      - allow_other_uses: true
-        number: GPIO21
-      - allow_other_uses: true
-        number: GPIO22
-      - allow_other_uses: true
-        number: GPIO23
-    enable_pin:
-      allow_other_uses: true
-      number: GPIO23
-    rs_pin:
-      allow_other_uses: true
-      number: GPIO25
-    lambda: |-
-      it.print("Hello World!");
-  - platform: lcd_pcf8574
-    dimensions: 18x4
-    address: 0x3F
-    user_characters:
-      - position: 0
-        data:
-          - 0b00000
-          - 0b01010
-          - 0b00000
-          - 0b00100
-          - 0b00100
-          - 0b10001
-          - 0b01110
-          - 0b00000
-    lambda: |-
-      it.print("Hello World!");
-    i2c_id: i2c_bus
-  - platform: max7219
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO23
-    num_chips: 1
-    lambda: |-
-      it.print("01234567");
-  - platform: tm1637
-    clk_pin:
-      allow_other_uses: true
-      number: GPIO23
-    dio_pin:
-      allow_other_uses: true
-      number: GPIO25
-    intensity: 3
-    lambda: |-
-      it.print("1234");
-  - platform: tm1637
-    clk_pin:
-      mcp23xxx: mcp23017_hub
-      number: 1
-      allow_other_uses: true
-    dio_pin:
-      mcp23xxx: mcp23017_hub
-      number: 2
-    intensity: 3
-    inverted: true
-    length: 4
-    lambda: |-
-      it.print("1234");
-  - platform: pcd8544
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO23
-    dc_pin:
-      allow_other_uses: true
-      number: GPIO23
-    reset_pin:
-      allow_other_uses: true
-      number: GPIO23
-    contrast: 60
-    lambda: |-
-      it.rectangle(0, 0, it.get_width(), it.get_height());
-  - platform: ssd1306_i2c
-    model: SSD1306_128X64
-    reset_pin:
-      allow_other_uses: true
-      number: GPIO23
-    address: 0x3C
-    id: display1
-    contrast: 60%
-    pages:
-      - id: page1
-        lambda: |-
-          it.qr_code(0, 0, id(homepage_qr));
-          it.rectangle(0, 0, it.get_width(), it.get_height());
-      - id: page2
-        lambda: |-
-          // Nothing
-    on_page_change:
-      from: page1
-      to: page2
-      then:
-        lambda: |-
-          ESP_LOGD("display", "1 -> 2");
-    i2c_id: i2c_bus
-  - platform: ssd1306_spi
-    model: SSD1306 128x64
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO23
-    dc_pin:
-      allow_other_uses: true
-      number: GPIO23
-    reset_pin:
-      allow_other_uses: true
-      number: GPIO23
-    lambda: |-
-      it.rectangle(0, 0, it.get_width(), it.get_height());
-  - platform: ssd1322_spi
-    model: SSD1322 256x64
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO23
-    dc_pin:
-      allow_other_uses: true
-      number: GPIO23
-    reset_pin:
-      allow_other_uses: true
-      number: GPIO23
-    lambda: |-
-      it.rectangle(0, 0, it.get_width(), it.get_height());
-  - platform: ssd1325_spi
-    model: SSD1325 128x64
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO23
-    dc_pin:
-      allow_other_uses: true
-      number: GPIO23
-    reset_pin:
-      allow_other_uses: true
-      number: GPIO23
-    lambda: |-
-      it.rectangle(0, 0, it.get_width(), it.get_height());
-  - platform: ssd1327_i2c
-    model: SSD1327 128X128
-    reset_pin:
-      allow_other_uses: true
-      number: GPIO23
-    address: 0x3D
-    id: display1327
-    brightness: 60%
-    pages:
-      - id: page13271
-        lambda: |-
-          it.rectangle(0, 0, it.get_width(), it.get_height());
-      - id: page13272
-        lambda: |-
-          // Nothing
-    i2c_id: i2c_bus
-  - platform: ssd1327_spi
-    model: SSD1327 128x128
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO23
-    dc_pin:
-      allow_other_uses: true
-      number: GPIO23
-    reset_pin:
-      allow_other_uses: true
-      number: GPIO23
-    lambda: |-
-      it.rectangle(0, 0, it.get_width(), it.get_height());
-  - platform: ssd1331_spi
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO23
-    dc_pin:
-      allow_other_uses: true
-      number: GPIO23
-    reset_pin:
-      allow_other_uses: true
-      number: GPIO23
-    lambda: |-
-      it.rectangle(0, 0, it.get_width(), it.get_height());
-  - platform: ssd1351_spi
-    model: SSD1351 128x128
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO23
-    dc_pin:
-      allow_other_uses: true
-      number: GPIO23
-    reset_pin:
-      allow_other_uses: true
-      number: GPIO23
-    lambda: |-
-      it.rectangle(0, 0, it.get_width(), it.get_height());
-  - platform: st7789v
-    model: TTGO TDisplay 135x240
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO5
-    dc_pin:
-      allow_other_uses: true
-      number: GPIO16
-    reset_pin:
-      allow_other_uses: true
-      number: GPIO23
-    backlight_pin: false
-    lambda: |-
-      it.rectangle(0, 0, it.get_width(), it.get_height());
-  - platform: st7920
-    width: 128
-    height: 64
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO23
-      inverted: true
-    lambda: |-
-      it.rectangle(0, 0, it.get_width(), it.get_height());
-  - platform: st7567_i2c
-    id: st7735_display_i2c
-    address: 0x3F
-    i2c_id: i2c_bus
-    lambda: |-
-      it.rectangle(0, 0, it.get_width(), it.get_height());
-  - platform: st7567_spi
-    id: st7735_display_spi
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO5
-    dc_pin:
-      allow_other_uses: true
-      number: GPIO16
-    reset_pin:
-      allow_other_uses: true
-      number: GPIO23
-    lambda: |-
-      it.rectangle(0, 0, it.get_width(), it.get_height());
-  - platform: st7735
-    id: st7735_display
-    model: INITR_BLACKTAB
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO5
-    dc_pin:
-      allow_other_uses: true
-      number: GPIO16
-    reset_pin:
-      allow_other_uses: true
-      number: GPIO23
-    rotation: 0
-    device_width: 128
-    device_height: 160
-    col_start: 0
-    row_start: 0
-    lambda: |-
-      it.rectangle(0, 0, it.get_width(), it.get_height());
-  - platform: ili9xxx
-    invert_colors: true
-    dimensions: 320x240
-    transform:
-      swap_xy: true
-      mirror_x: true
-      mirror_y: false
-    model: TFT 2.4
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO5
-    dc_pin:
-      allow_other_uses: true
-      number: GPIO4
-    color_palette: GRAYSCALE
-    reset_pin:
-      allow_other_uses: true
-      number: GPIO22
-    lambda: |-
-      it.rectangle(0, 0, it.get_width(), it.get_height());
-  - platform: ili9xxx
-    dimensions:
-      width: 320
-      height: 240
-      offset_width: 20
-      offset_height: 10
-    model: TFT 2.4
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO5
-    dc_pin:
-      allow_other_uses: true
-      number: GPIO4
-    reset_pin:
-      allow_other_uses: true
-      number: GPIO22
-    auto_clear_enabled: false
-    rotation: 90
-    lambda: |-
-      if (!id(glob_bool_processed)) {
-        it.fill(Color::WHITE);
-        id(glob_bool_processed) = true;
-      }
-  - platform: pvvx_mithermometer
-    ble_client_id: ble_foo
-    time_id: sntp_time
-    disconnect_delay: 3s
-    update_interval: 10min
-    validity_period: 20min
-    lambda: |-
-      it.print_bignum(188.8);
-      it.print_unit(pvvx_mithermometer::UNIT_DEG_E);
-      it.print_smallnum(88);
-      it.print_percent(true);
-      it.print_happy(true);
-      it.print_sad(true);
-      it.print_bracket(true);
-      it.print_battery(true);
-  - platform: tm1621
-    id: tm1621_display
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO17
-    data_pin:
-      allow_other_uses: true
-      number: GPIO5
-    read_pin:
-      allow_other_uses: true
-      number: GPIO23
-    write_pin:
-      allow_other_uses: true
-      number: GPIO18
-    lambda: |-
-      it.printf(0, "%.1f", id(dht_temperature).state);
-      it.display_celsius(true);
-      it.printf(1, "%.1f", id(dht_humidity).state);
-      it.display_humidity(true);
-
-tm1651:
-  id: tm1651_battery
-  clk_pin:
-    allow_other_uses: true
-    number: GPIO23
-  dio_pin:
-    allow_other_uses: true
-    number: GPIO23
-
-remote_receiver:
-  id: rcvr
-  pin:
-    allow_other_uses: true
-    number: GPIO32
-  dump: all
-  on_coolix:
-    then:
-      delay: !lambda "return x.first + x.second;"
-  on_rc_switch:
-    then:
-      delay: !lambda "return uint32_t(x.code) + x.protocol;"
-
-status_led:
-  pin:
-    allow_other_uses: true
-    number: GPIO2
-    ignore_strapping_warning: true
-
-pn532_spi:
-  id: pn532_bs
-  cs_pin:
-    allow_other_uses: true
-    number: GPIO23
-  update_interval: 1s
-  on_tag:
-    - lambda: |-
-        ESP_LOGD("main", "Found tag %s", x.c_str());
-    - mqtt.publish:
-        topic: the/topic
-        payload: !lambda "return x;"
-  on_tag_removed:
-    - lambda: |-
-        ESP_LOGD("main", "Removed tag %s", x.c_str());
-    - mqtt.publish:
-        topic: the/topic
-        payload: !lambda "return x;"
-
-pn532_i2c:
-  i2c_id: i2c_bus
-
-pn7150_i2c:
-  id: nfcc_pn7150_i2c
-  i2c_id: i2c_bus
-  irq_pin:
-    allow_other_uses: true
-    number: GPIO32
-  ven_pin:
-    allow_other_uses: true
-    number: GPIO16
-
-pn7160_i2c:
-  id: nfcc_pn7160_i2c
-  i2c_id: i2c_bus
-  dwl_req_pin:
-    allow_other_uses: true
-    number: GPIO17
-  irq_pin:
-    allow_other_uses: true
-    number: GPIO35
-  ven_pin:
-    allow_other_uses: true
-    number: GPIO16
-  wkup_req_pin:
-    allow_other_uses: true
-    number: GPIO21
-  emulation_message: https://www.home-assistant.io/tag/pulse_ce
-  tag_ttl: 1000ms
-
-pn7160_spi:
-  id: nfcc_pn7160_spi
-  cs_pin:
-    number: GPIO15
-  dwl_req_pin:
-    allow_other_uses: true
-    number: GPIO17
-  irq_pin:
-    allow_other_uses: true
-    number: GPIO35
-  ven_pin:
-    allow_other_uses: true
-    number: GPIO16
-  wkup_req_pin:
-    allow_other_uses: true
-    number: GPIO21
-  emulation_message: https://www.home-assistant.io/tag/pulse_ce
-  tag_ttl: 1000ms
-
-rdm6300:
-  uart_id: uart_0
-
-rc522_spi:
-  cs_pin:
-    allow_other_uses: true
-    number: GPIO23
-  update_interval: 1s
-  on_tag:
-    - lambda: |-
-        ESP_LOGD("main", "Found tag %s", x.c_str());
-
-rc522_i2c:
-  - update_interval: 1s
-    on_tag:
-      - lambda: |-
-          ESP_LOGD("main", "Found tag %s", x.c_str());
-    i2c_id: i2c_bus
-
-  - update_interval: 1s
-    on_tag:
-      - lambda: |-
-          ESP_LOGD("main", "Found tag %s", x.c_str());
-    i2c_id: i2c_bus
-
-mcp4728:
-  - id: mcp4728_dac
-    store_in_eeprom: false
-    address: 0x60
-    i2c_id: i2c_bus
-
-gps:
-  uart_id: uart_0
-
-time:
-  - platform: sntp
-    id: sntp_time
-    servers:
-      - 0.pool.ntp.org
-      - 1.pool.ntp.org
-      - 192.168.178.1
-    on_time:
-      cron: "/30 0-30,30/5 * ? JAN-DEC MON,SAT-SUN,TUE-FRI"
-      then:
-        - lambda: 'ESP_LOGD("main", "time");'
-  - platform: gps
-    on_time_sync:
-      then:
-        ds1307.write_time:
-          id: ds1307_time
-  - platform: ds1307
-    id: ds1307_time
-    update_interval: never
-    i2c_id: i2c_bus
-    on_time:
-      - seconds: 0
-        then: ds1307.read_time
-      - at: "16:00:00"
-        then:
-          - if:
-              condition:
-                or:
-                  - binary_sensor.is_on: close_sensor
-                  - binary_sensor.is_on: open_sensor
-              then:
-                logger.log: "close_sensor or open_sensor is on"
-          - if:
-              condition:
-                and:
-                  - binary_sensor.is_on: close_sensor
-                  - binary_sensor.is_on: open_sensor
-              then:
-                logger.log: "close_sensor and open_sensor are both on"
-          - if:
-              condition:
-                xor:
-                  - binary_sensor.is_on: close_sensor
-                  - binary_sensor.is_on: open_sensor
-              then:
-                logger.log: "close_sensor or open_sensor is exclusively on"
-          - if:
-              condition:
-                not:
-                  - binary_sensor.is_on: close_sensor
-              then:
-                logger.log: "close_sensor is not on"
-cover:
-  - platform: template
-    name: Template Cover
-    id: template_cover
-    lambda: |-
-      if (id(binary_sensor1).state) {
-        return COVER_OPEN;
-      } else {
-        return {};
-      }
-    optimistic: true
-    open_action:
-      - cover.template.publish:
-          id: template_cover
-          state: CLOSED
-    assumed_state: false
-    has_position: true
-    position_state_topic: position/state/topic
-    position_command_topic: position/command/topic
-    tilt_lambda: !lambda "return 0.5;"
-    tilt_state_topic: tilt/state/topic
-    tilt_command_topic: tilt/command/topic
-    on_open:
-      then:
-        - lambda: 'ESP_LOGD("cover", "open");'
-    on_closed:
-      then:
-        - lambda: 'ESP_LOGD("cover", "closed");'
-  - platform: am43
-    name: Test AM43
-    id: am43_test
-    ble_client_id: ble_foo
-    icon: mdi:blinds
-  - platform: feedback
-    name: Feedback Cover
-    id: gate
-    device_class: gate
-
-    infer_endstop_from_movement: false
-    has_built_in_endstop: false
-    max_duration: 30s
-    direction_change_wait_time: 300ms
-    acceleration_wait_time: 150ms
-    obstacle_rollback: 10%
-
-    open_duration: 22.1s
-    open_endstop: open_endstop_sensor
-    open_sensor: open_sensor
-    open_obstacle_sensor: open_obstacle_sensor
-
-    close_duration: 22.4s
-    close_endstop: close_endstop_sensor
-    close_sensor: close_sensor
-    close_obstacle_sensor: close_obstacle_sensor
-
-    open_action:
-      - logger.log: Open Action
-
-    close_action:
-      - logger.log: Close Action
-
-    stop_action:
-      - logger.log: Stop Action
-
-debug:
-
-tca9548a:
-  - address: 0x70
-    id: multiplex0
-    channels:
-      - bus_id: multiplex0_chan0
-        channel: 0
-    i2c_id: i2c_bus
-  - address: 0x71
-    id: multiplex1
-    i2c_id: multiplex0_chan0
-
-pcf8574:
-  - id: pcf8574_hub
-    address: 0x21
-    pcf8575: false
-    i2c_id: i2c_bus
-
-pca9554:
-  - id: pca9554_hub
-    pin_count: 8
-    address: 0x3F
-    i2c_id: i2c_bus
-
-pca6416a:
-  - id: pca6416a_hub
-    address: 0x21
-    i2c_id: i2c_bus
-
-mcp23017:
-  - id: mcp23017_hub
-    open_drain_interrupt: true
-    i2c_id: i2c_bus
-
-mcp23008:
-  - id: mcp23008_hub
-    address: 0x22
-    open_drain_interrupt: true
-    i2c_id: i2c_bus
-
-mcp23016:
-  - id: mcp23016_hub
-    address: 0x23
-    i2c_id: i2c_bus
-
-stepper:
-  - platform: a4988
-    id: my_stepper
-    step_pin:
-      allow_other_uses: true
-      number: GPIO23
-    dir_pin:
-      allow_other_uses: true
-      number: GPIO25
-    sleep_pin:
-      allow_other_uses: true
-      number: GPIO25
-    max_speed: 250 steps/s
-    acceleration: 100 steps/s^2
-    deceleration: 200 steps/s^2
-
-globals:
-  - id: glob_int
-    type: int
-    restore_value: true
-    initial_value: "0"
-  - id: glob_float
-    type: float
-    restore_value: true
-    initial_value: "0.0f"
-  - id: glob_bool
-    type: bool
-    restore_value: false
-    initial_value: "true"
-  - id: glob_string
-    type: std::string
-    restore_value: false
-    # initial_value: ""
-  - id: glob_bool_processed
-    type: bool
-    restore_value: false
-    initial_value: "false"
-
-text_sensor:
-  - platform: ble_client
-    ble_client_id: ble_foo
-    name: Sensor Location
-    service_uuid: "180d"
-    characteristic_uuid: "2a38"
-    descriptor_uuid: "2902"
-    notify: true
-    update_interval: never
-    on_notify:
-      then:
-        - lambda: |-
-            ESP_LOGD("green_btn", "Location changed: %s", x.c_str());
-  - platform: mqtt_subscribe
-    name: MQTT Subscribe Text
-    topic: "the/topic"
-    qos: 2
-    on_value:
-      - text_sensor.template.publish:
-          id: ${textname}_text
-          state: Hello World
-      - text_sensor.template.publish:
-          id: ${textname}_text
-          state: |-
-            return "Hello World2";
-      - globals.set:
-          id: glob_int
-          value: "0"
-      - canbus.send:
-          canbus_id: mcp2515_can
-          can_id: 23
-          data: [0x10, 0x20, 0x30]
-      - canbus.send:
-          canbus_id: mcp2515_can
-          can_id: 23
-          data: !lambda return {0x10, 0x20, 0x30};
-      - canbus.send:
-          canbus_id: esp32_internal_can
-          can_id: 23
-          data: [0x10, 0x20, 0x30]
-      - canbus.send:
-          canbus_id: mcp2515_can
-          can_id: 24
-          remote_transmission_request: true
-          data: []
-      - canbus.send:
-          canbus_id: esp32_internal_can
-          can_id: 24
-          remote_transmission_request: true
-          data: []
-  - platform: template
-    name: Template Text Sensor
-    id: ${textname}_text
-  - platform: template
-    name: Template Text Sensor Timestamp
-    id: ${textname}_text_timestamp
-    device_class: timestamp
-  - platform: wifi_info
-    scan_results:
-      name: Scan Results
-    ip_address:
-      name: IP Address
-    ssid:
-      name: SSID
-    bssid:
-      name: BSSID
-    mac_address:
-      name: Mac Address
-    dns_address:
-      name: DNS ADdress
-  - platform: version
-    name: ESPHome Version No Timestamp
-    hide_timestamp: true
-  - platform: teleinfo
-    tag_name: OPTARIF
-    name: optarif
-    teleinfo_id: myteleinfo
-  - platform: ld2410
-    version:
-      name: "presenece sensor version"
-    mac_address:
-      name: "presenece sensor mac address"
-
-sn74hc595:
-  - id: sn74hc595_hub
-    data_pin:
-      allow_other_uses: true
-      number: GPIO21
-    clock_pin:
-      allow_other_uses: true
-      number: GPIO23
-    latch_pin:
-      allow_other_uses: true
-      number: GPIO22
-    oe_pin:
-      allow_other_uses: true
-      number: GPIO32
-    sr_count: 2
-  - id: sn74hc595_hub_2
-    latch_pin:
-      allow_other_uses: true
-      number: GPIO22
-    oe_pin:
-      allow_other_uses: true
-      number: GPIO32
-    sr_count: 2
-    spi_id: spi_bus
-    type: spi
-
-rtttl:
-  output: gpio_19
-
-canbus:
-  - platform: mcp2515
-    id: mcp2515_can
-    cs_pin:
-      pca9554: pca9554_hub
-      number: 7
-      mode:
-        output: true
-      inverted: true
-    can_id: 4
-    bit_rate: 50kbps
-    on_frame:
-      - can_id: 500
-        then:
-          - lambda: |-
-              std::string b(x.begin(), x.end());
-              ESP_LOGD("canid 500", "%s", b.c_str());
-      - can_id: 23
-        then:
-          - if:
-              condition:
-                lambda: "return x[0] == 0x11;"
-              then:
-                light.toggle: ${roomname}_lights
-      - can_id: 0b00000000000000000000001000000
-        can_id_mask: 0b11111000000000011111111000000
-        use_extended_id: true
-        then:
-          - lambda: |-
-              auto pdo_id = can_id >> 14;
-              switch (pdo_id)
-              {
-                case 117:
-                  ESP_LOGD("canbus", "exhaust_fan_duty");
-                  break;
-                case 118:
-                  ESP_LOGD("canbus", "supply_fan_duty");
-                  break;
-                case 119:
-                  ESP_LOGD("canbus", "supply_fan_flow");
-                  break;
-                // to be continued...
-              }
-  - platform: esp32_can
-    id: esp32_internal_can
-    rx_pin:
-      allow_other_uses: true
-      number: GPIO04
-    tx_pin:
-      allow_other_uses: true
-      number: GPIO05
-    can_id: 4
-    bit_rate: 50kbps
-    on_frame:
-      - can_id: 500
-        then:
-          - lambda: |-
-              std::string b(x.begin(), x.end());
-              ESP_LOGD("canid 500", "%s", b.c_str() );
-      - can_id: 23
-        then:
-          - if:
-              condition:
-                lambda: "return x[0] == 0x11;"
-              then:
-                light.toggle: ${roomname}_lights
-      - can_id: 0b00000000000000000000001000000
-        can_id_mask: 0b11111000000000011111111000000
-        use_extended_id: true
-        then:
-          - lambda: |-
-              auto pdo_id = can_id >> 14;
-              switch (pdo_id)
-              {
-                case 117:
-                  ESP_LOGD("canbus", "exhaust_fan_duty");
-                  break;
-                case 118:
-                  ESP_LOGD("canbus", "supply_fan_duty");
-                  break;
-                case 119:
-                  ESP_LOGD("canbus", "supply_fan_flow");
-                  break;
-                // to be continued...
-              }
-
-teleinfo:
-  id: myteleinfo
-  uart_id: uart_0
-  update_interval: 60s
-  historical_mode: true
-
-number:
-  - platform: template
-    id: test_number
-    state_topic: livingroom/custom_state_topic
-    command_topic: livingroom/custom_command_topic
-    min_value: 0
-    step: 1
-    max_value: 10
-    optimistic: true
-  - platform: ld2410
-    light_threshold:
-      name: light threshold
-    timeout:
-      name: timeout
-    max_move_distance_gate:
-      name: max move distance gate
-    max_still_distance_gate:
-      name: max still distance gate
-    g0:
-      move_threshold:
-        name: g0 move threshold
-      still_threshold:
-        name: g0 still threshold
-    g1:
-      move_threshold:
-        name: g1 move threshold
-      still_threshold:
-        name: g1 still threshold
-    g2:
-      move_threshold:
-        name: g2 move threshold
-      still_threshold:
-        name: g2 still threshold
-    g3:
-      move_threshold:
-        name: g3 move threshold
-      still_threshold:
-        name: g3 still threshold
-    g4:
-      move_threshold:
-        name: g4 move threshold
-      still_threshold:
-        name: g4 still threshold
-    g5:
-      move_threshold:
-        name: g5 move threshold
-      still_threshold:
-        name: g5 still threshold
-    g6:
-      move_threshold:
-        name: g6 move threshold
-      still_threshold:
-        name: g6 still threshold
-    g7:
-      move_threshold:
-        name: g7 move threshold
-      still_threshold:
-        name: g7 still threshold
-    g8:
-      move_threshold:
-        name: g8 move threshold
-      still_threshold:
-        name: g8 still threshold
-  - platform: micronova
-    thermostat_temperature:
-      name: Micronova Thermostaat
-      step: 1
-    power_level:
-      name: Micronova Power level
-
-select:
-  - platform: template
-    id: test_select
-    state_topic: livingroom/custom_state_topic
-    command_topic: livingroom/custom_command_topic
-    options:
-      - one
-      - two
-    optimistic: true
-  - platform: copy
-    source_id: test_select
-    name: Test Select Copy
-  - platform: ld2410
-    distance_resolution:
-      name: distance resolution
-    baud_rate:
-      name: baud rate
-    light_function:
-      name: light function
-    out_pin_level:
-      name: out ping level
-
-qr_code:
-  - id: homepage_qr
-    value: https://esphome.io/index.html
-
-lock:
-  - platform: template
-    id: test_lock1
-    name: Template Switch
-    lambda: |-
-      if (id(binary_sensor1).state) {
-        return LOCK_STATE_LOCKED;
-      }else{
-        return LOCK_STATE_UNLOCKED;
-      }
-    optimistic: true
-    assumed_state: false
-    on_unlock:
-      - lock.template.publish:
-          id: test_lock1
-          state: !lambda "return LOCK_STATE_UNLOCKED;"
-    on_lock:
-      - lock.template.publish:
-          id: test_lock1
-          state: !lambda "return LOCK_STATE_LOCKED;"
-  - platform: output
-    name: Generic Output Lock
-    id: test_lock2
-    output: pca_6
-  - platform: copy
-    source_id: test_lock2
-    name: Generic Output Lock Copy
-
-button:
-  - platform: template
-    name: Start calibration
-    on_press:
-      - scd4x.perform_forced_calibration:
-          value: 419
-          id: scd40
-      - scd4x.factory_reset:
-          id: scd40
-  - platform: template
-    name: Midea Display Toggle
-    on_press:
-      midea_ac.display_toggle:
-  - platform: template
-    name: Midea Swing Step
-    on_press:
-      midea_ac.swing_step:
-  - platform: template
-    name: Midea Power On
-    on_press:
-      midea_ac.power_on:
-  - platform: template
-    name: Midea Power Off
-    on_press:
-      midea_ac.power_off:
-  - platform: template
-    name: Midea Power Inverse
-    on_press:
-      midea_ac.power_toggle:
-  - platform: template
-    name: Update Mmwave Sensor Settings
-    on_press:
-      - dfrobot_sen0395.settings:
-          id: mmwave
-          factory_reset: true
-          detection_segments:
-            - [0cm, 5m]
-            - 600cm
-            - !lambda |-
-              return 7;
-          output_latency:
-            delay_after_detect: 0s
-            delay_after_disappear: 0s
-          sensitivity: 6
-  - platform: template
-    name: Reset Mmwave Sensor
-    on_press:
-      - dfrobot_sen0395.reset:
-  - platform: template
-    name: Poller component suspend test
-    on_press:
-      - component.suspend: myteleinfo
-      - delay: 20s
-      - component.update: myteleinfo
-      - delay: 20s
-      - component.resume: myteleinfo
-      - delay: 20s
-      - component.resume:
-          id: myteleinfo
-          update_interval: 2s
-      - delay: 20s
-      - component.resume:
-          id: myteleinfo
-          update_interval: !lambda return 2500;
-  - platform: ld2410
-    factory_reset:
-      name: "factory reset"
-    restart:
-      name: "restart"
-    query_params:
-      name: query params
-  - platform: uart
-    uart_id: uart_0
-    name: UART button
-    data: "Pressed\r\n"
-  - platform: micronova
-    custom_button:
-      name: Custom Micronova Button
-      memory_location: 0xA0
-      memory_address: 0x7D
-      memory_data: 0x0F
-
-ld2410:
-  id: my_ld2410
-  uart_id: ld2410_uart
-
-ld2420:
-  id: my_ld2420
-  uart_id: ld2420_uart
-
-lcd_menu:
-  id: test_lcd_menu
-  display_id: my_lcd_gpio
-  mark_back: 0x5e
-  mark_selected: 0x3e
-  mark_editing: 0x2a
-  mark_submenu: 0x7e
-  active: false
-  mode: rotary
-  on_enter:
-    then:
-      lambda: 'ESP_LOGI("lcd_menu", "root enter");'
-  on_leave:
-    then:
-      lambda: 'ESP_LOGI("lcd_menu", "root leave");'
-  items:
-    - type: back
-      text: Back
-    - type: label
-    - type: menu
-      text: Submenu 1
-      items:
-        - type: back
-          text: Back
-        - type: menu
-          text: Submenu 21
-          items:
-            - type: back
-              text: Back
-            - type: command
-              text: Show Main
-              on_value:
-                then:
-                  - display_menu.show_main: test_lcd_menu
-    - type: select
-      text: Enum Item
-      immediate_edit: true
-      select: test_select
-      on_enter:
-        then:
-          lambda: 'ESP_LOGI("lcd_menu", "select enter: %s, %s", it->get_text().c_str(), it->get_value_text().c_str());'
-      on_leave:
-        then:
-          lambda: 'ESP_LOGI("lcd_menu", "select leave: %s, %s", it->get_text().c_str(), it->get_value_text().c_str());'
-      on_value:
-        then:
-          lambda: 'ESP_LOGI("lcd_menu", "select value: %s, %s", it->get_text().c_str(), it->get_value_text().c_str());'
-    - type: number
-      text: Number
-      number: test_number
-      on_enter:
-        then:
-          lambda: 'ESP_LOGI("lcd_menu", "number enter: %s, %s", it->get_text().c_str(), it->get_value_text().c_str());'
-      on_leave:
-        then:
-          lambda: 'ESP_LOGI("lcd_menu", "number leave: %s, %s", it->get_text().c_str(), it->get_value_text().c_str());'
-      on_value:
-        then:
-          lambda: 'ESP_LOGI("lcd_menu", "number value: %s, %s", it->get_text().c_str(), it->get_value_text().c_str());'
-    - type: command
-      text: Hide
-      on_value:
-        then:
-          - display_menu.hide: test_lcd_menu
-    - type: switch
-      text: Switch
-      switch: my_switch
-      on_text: Bright
-      off_text: Dark
-      immediate_edit: false
-      on_value:
-        then:
-          lambda: 'ESP_LOGI("lcd_menu", "switch value: %s", it->get_value_text().c_str());'
-    - type: custom
-      text: !lambda 'return "Custom";'
-      value_lambda: 'return "Val";'
-      on_next:
-        then:
-          lambda: 'ESP_LOGI("lcd_menu", "custom next: %s", it->get_text().c_str());'
-      on_prev:
-        then:
-          lambda: 'ESP_LOGI("lcd_menu", "custom prev: %s", it->get_text().c_str());'
-
-font:
-  - file: "gfonts://Roboto"
-    id: roboto
-    size: 20
-
-graphical_display_menu:
-  id: test_graphical_display_menu
-  display: st7735_display
-  font: roboto
-  active: false
-  mode: rotary
-  on_enter:
-    then:
-      lambda: 'ESP_LOGI("graphical_display_menu", "root enter");'
-  on_leave:
-    then:
-      lambda: 'ESP_LOGI("graphical_display_menu", "root leave");'
-  items:
-    - type: back
-      text: "Back"
-    - type: label
-    - type: menu
-      text: "Submenu 1"
-      items:
-        - type: back
-          text: "Back"
-        - type: menu
-          text: "Submenu 21"
-          items:
-            - type: back
-              text: "Back"
-            - type: command
-              text: "Show Main"
-              on_value:
-                then:
-                  - display_menu.show_main: test_graphical_display_menu
-    - type: select
-      text: "Enum Item"
-      immediate_edit: true
-      select: test_select
-      on_enter:
-        then:
-          lambda: 'ESP_LOGI("graphical_display_menu", "select enter: %s, %s", it->get_text().c_str(), it->get_value_text().c_str());'
-      on_leave:
-        then:
-          lambda: 'ESP_LOGI("graphical_display_menu", "select leave: %s, %s", it->get_text().c_str(), it->get_value_text().c_str());'
-      on_value:
-        then:
-          lambda: 'ESP_LOGI("graphical_display_menu", "select value: %s, %s", it->get_text().c_str(), it->get_value_text().c_str());'
-    - type: number
-      text: "Number"
-      number: test_number
-      on_enter:
-        then:
-          lambda: 'ESP_LOGI("graphical_display_menu", "number enter: %s, %s", it->get_text().c_str(), it->get_value_text().c_str());'
-      on_leave:
-        then:
-          lambda: 'ESP_LOGI("graphical_display_menu", "number leave: %s, %s", it->get_text().c_str(), it->get_value_text().c_str());'
-      on_value:
-        then:
-          lambda: 'ESP_LOGI("graphical_display_menu", "number value: %s, %s", it->get_text().c_str(), it->get_value_text().c_str());'
-    - type: command
-      text: "Hide"
-      on_value:
-        then:
-          - display_menu.hide: test_graphical_display_menu
-    - type: switch
-      text: "Switch"
-      switch: my_switch
-      on_text: "Bright"
-      off_text: "Dark"
-      immediate_edit: false
-      on_value:
-        then:
-          lambda: 'ESP_LOGI("graphical_display_menu", "switch value: %s", it->get_value_text().c_str());'
-    - type: custom
-      text: !lambda 'return "Custom";'
-      value_lambda: 'return "Val";'
-      on_next:
-        then:
-          lambda: 'ESP_LOGI("graphical_display_menu", "custom next: %s", it->get_text().c_str());'
-      on_prev:
-        then:
-          lambda: 'ESP_LOGI("graphical_display_menu", "custom prev: %s", it->get_text().c_str());'
-
-alarm_control_panel:
-  - platform: template
-    id: alarmcontrolpanel1
-    name: Alarm Panel
-    codes:
-      - "1234"
-    requires_code_to_arm: true
-    arming_home_time: 1s
-    arming_away_time: 15s
-    pending_time: 15s
-    trigger_time: 30s
-    binary_sensors:
-      - binary_sensor1
-    on_state:
-      then:
-        - lambda: !lambda |-
-            ESP_LOGD("TEST", "State change %s", alarm_control_panel_state_to_string(id(alarmcontrolpanel1)->get_state()));
diff --git a/tests/test11.5.yaml b/tests/test11.5.yaml
deleted file mode 100644
index 758f295a6c..0000000000
--- a/tests/test11.5.yaml
+++ /dev/null
@@ -1,809 +0,0 @@
----
-# copy of test5.yaml configured to build on IDF 5
-esphome:
-  name: test11-5
-  build_path: build/test11.5
-  project:
-    name: esphome.test11_5_project
-    version: "1.0.0"
-
-esp32:
-  board: nodemcu-32s
-  framework:
-    type: esp-idf
-    version: 5.0.2
-    platform_version: 6.3.2
-    advanced:
-      ignore_efuse_mac_crc: true
-
-wifi:
-  networks:
-    - ssid: "MySSID"
-      password: "password1"
-      manual_ip:
-        static_ip: 192.168.1.23
-        gateway: 192.168.1.1
-        subnet: 255.255.255.0
-
-network:
-  enable_ipv6: true
-
-api:
-
-ota:
-  - platform: esphome
-
-logger:
-
-debug:
-
-psram:
-
-uart:
-  - id: uart_1
-    tx_pin: 1
-    rx_pin: 3
-    baud_rate: 9600
-  - id: uart_2
-    tx_pin:
-      allow_other_uses: true
-      number: 17
-    rx_pin:
-      allow_other_uses: true
-      number: 16
-    baud_rate: 19200
-
-i2c:
-  sda:
-    number: 21
-    allow_other_uses: true
-  frequency: 100khz
-
-spi:
-  - id: spi_1
-    clk_pin:
-      allow_other_uses: true
-      number: 12
-    mosi_pin:
-      allow_other_uses: true
-      number: 13
-    miso_pin:
-      allow_other_uses: true
-      number: 14
-  - id: spi_2
-    clk_pin:
-      allow_other_uses: true
-      number: 32
-    mosi_pin: 33
-
-modbus:
-  uart_id: uart_1
-  flow_control_pin:
-    allow_other_uses: true
-    number: 5
-  id: mod_bus1
-
-modbus_controller:
-  - id: modbus_controller_test
-    address: 0x2
-    modbus_id: mod_bus1
-
-mqtt:
-  broker: test.mosquitto.org
-  port: 1883
-  discovery: true
-  discovery_prefix: homeassistant
-  idf_send_async: false
-  on_message:
-    topic: testing/sensor/testing_sensor/state
-    qos: 0
-    then:
-      # yamllint disable rule:line-length
-      - lambda: |-
-          ESP_LOGD("Mqtt Test", "testing/sensor/testing_sensor/state=[%s]", x.c_str());
-      # yamllint enable rule:line-length
-
-vbus:
-  - uart_id: uart_2
-
-binary_sensor:
-  - platform: gpio
-    pin: GPIO0
-    id: io0_button
-    icon: mdi:gesture-tap-button
-
-  - platform: modbus_controller
-    modbus_controller_id: modbus_controller_test
-    id: modbus_binsensortest
-    register_type: read
-    address: 0x3200
-    bitmask: 0x80  # (bit 8)
-    lambda: "return x;"
-
-  - platform: tm1638
-    id: Button0
-    key: 0
-    filters:
-      - delayed_on: 10ms
-    on_press:
-      then:
-        - switch.turn_on: Led0
-    on_release:
-      then:
-        - switch.turn_off: Led0
-        - if:
-            condition: ble.enabled
-            then:
-              - ble.disable:
-            else:
-              - ble.enable:
-
-  - platform: tm1638
-    id: Button1
-    key: 1
-    on_press:
-      then:
-        - switch.turn_on: Led1
-    on_release:
-      then:
-        - switch.turn_off: Led1
-
-  - platform: tm1638
-    id: Button2
-    key: 2
-    on_press:
-      then:
-        - switch.turn_on: Led2
-    on_release:
-      then:
-        - switch.turn_off: Led2
-
-  - platform: tm1638
-    id: Button3
-    key: 3
-    on_press:
-      then:
-        - switch.turn_on: Led3
-    on_release:
-      then:
-        - switch.turn_off: Led3
-
-  - platform: tm1638
-    id: Button4
-    key: 4
-    on_press:
-      then:
-        - output.turn_on: Led4
-    on_release:
-      then:
-        - output.turn_off: Led4
-
-  - platform: tm1638
-    id: Button5
-    key: 5
-    on_press:
-      then:
-        - output.turn_on: Led5
-    on_release:
-      then:
-        - output.turn_off: Led5
-
-  - platform: tm1638
-    id: Button6
-    key: 6
-    on_press:
-      then:
-        - output.turn_on: Led6
-    on_release:
-      then:
-        - output.turn_off: Led6
-
-  - platform: tm1638
-    id: Button7
-    key: 7
-    on_press:
-      then:
-        - output.turn_on: Led7
-    on_release:
-      then:
-        - output.turn_off: Led7
-
-  - platform: gpio
-    id: sn74hc165_pin_0
-    pin:
-      sn74hc165: sn74hc165_hub
-      number: 0
-
-  - platform: ezo_pmp
-    pump_state:
-      name: "Pump State"
-    is_paused:
-      name: "Is Paused"
-
-  - platform: matrix_keypad
-    keypad_id: keypad
-    id: key4
-    row: 1
-    col: 1
-  - platform: matrix_keypad
-    id: key1
-    key: 1
-
-  - platform: vbus
-    model: deltasol_bs_plus
-    relay2:
-      name: Relay 2 On
-    sensor1_error:
-      name: Sensor 1 Error
-
-  - platform: vbus
-    model: custom
-    command: 0x100
-    source: 0x1234
-    dest: 0x10
-    binary_sensors:
-      - id: vcustom_b
-        name: VBus Custom Binary Sensor
-        lambda: return x[0] & 1;
-
-tlc5947:
-  data_pin:
-    allow_other_uses: true
-    number: GPIO12
-  clock_pin:
-    allow_other_uses: true
-    number: GPIO14
-  lat_pin:
-    allow_other_uses: true
-    number: GPIO15
-
-gp8403:
-  - id: gp8403_5v
-    voltage: 5V
-  - id: gp8403_10v
-    voltage: 10V
-
-output:
-  - platform: gpio
-    pin: GPIO2
-    id: built_in_led
-
-  - platform: tlc5947
-    id: output_red
-    channel: 0
-    max_power: 0.8
-
-  - platform: mcp47a1
-    id: output_mcp47a1
-
-  - platform: modbus_controller
-    modbus_controller_id: modbus_controller_test
-    id: modbus_output_test
-    lambda: |-
-      return x * 1.0 ;
-    address: 0x9001
-    value_type: U_WORD
-
-  - platform: tm1638
-    id: Led4
-    led: 4
-
-  - platform: tm1638
-    id: Led5
-    led: 5
-
-  - platform: tm1638
-    id: Led6
-    led: 6
-
-  - platform: tm1638
-    id: Led7
-    led: 7
-
-  - platform: gp8403
-    id: gp8403_output_0
-    gp8403_id: gp8403_5v
-    channel: 0
-  - platform: gp8403
-    gp8403_id: gp8403_10v
-    id: gp8403_output_1
-    channel: 1
-
-demo:
-
-esp32_ble:
-  enable_on_boot: false
-
-esp32_ble_server:
-  manufacturer: ESPHome
-  model: Test11
-
-esp32_improv:
-  authorizer: io0_button
-  authorized_duration: 1min
-  status_indicator: built_in_led
-
-ezo_pmp:
-  id: hcl_pump
-  update_interval: 1s
-
-number:
-  - platform: template
-    name: My template number
-    id: template_number_id
-    optimistic: true
-    max_value: 100
-    min_value: 0
-    step: 5
-    unit_of_measurement: "%"
-    mode: slider
-    device_class: humidity
-    on_value:
-      - logger.log:
-          format: Number changed to %f
-          args: [x]
-    set_action:
-      - logger.log:
-          format: Template Number set to %f
-          args: [x]
-      - number.set:
-          id: template_number_id
-          value: 50
-      - number.to_min: template_number_id
-      - number.to_min:
-          id: template_number_id
-      - number.to_max: template_number_id
-      - number.to_max:
-          id: template_number_id
-      - number.increment: template_number_id
-      - number.increment:
-          id: template_number_id
-          cycle: false
-      - number.decrement: template_number_id
-      - number.decrement:
-          id: template_number_id
-          cycle: false
-      - number.operation:
-          id: template_number_id
-          operation: Increment
-          cycle: false
-      - number.operation:
-          id: template_number_id
-          operation: !lambda "return NUMBER_OP_INCREMENT;"
-          cycle: !lambda "return false;"
-
-  - id: modbus_numbertest
-    platform: modbus_controller
-    modbus_controller_id: modbus_controller_test
-    name: ModbusNumber
-    address: 0x9002
-    value_type: U_WORD
-    lambda: "return  x * 1.0;"
-    write_lambda: |-
-      return x * 1.0 ;
-    multiply: 1.0
-
-select:
-  - platform: template
-    name: My template select
-    id: template_select_id
-    optimistic: true
-    initial_option: two
-    restore_value: true
-    on_value:
-      - logger.log:
-          format: Select changed to %s (index %d)"
-          args: ["x.c_str()", "i"]
-    set_action:
-      - logger.log:
-          format: Template Select set to %s
-          args: ["x.c_str()"]
-      - select.set:
-          id: template_select_id
-          option: two
-      - select.first: template_select_id
-      - select.last:
-          id: template_select_id
-      - select.previous: template_select_id
-      - select.next:
-          id: template_select_id
-          cycle: false
-      - select.operation:
-          id: template_select_id
-          operation: Previous
-          cycle: false
-      - select.operation:
-          id: template_select_id
-          operation: !lambda "return SELECT_OP_PREVIOUS;"
-          cycle: !lambda "return true;"
-      - select.set_index:
-          id: template_select_id
-          index: 1
-      - select.set_index:
-          id: template_select_id
-          index: !lambda "return 1 + 1;"
-    options:
-      - one
-      - two
-      - three
-
-  - platform: modbus_controller
-    name: Modbus Select Register 1000
-    address: 1000
-    value_type: U_WORD
-    optionsmap:
-      "Zero": 0
-      "One": 1
-      "Two": 2
-      "Three": 3
-
-sensor:
-  - platform: adc
-    id: adc_sensor_p32
-    name: ADC pin 32
-    pin:
-      allow_other_uses: true
-      number: 32
-    attenuation: 11db
-    update_interval: 1s
-  - platform: internal_temperature
-    name: Internal Temperature
-  - platform: selec_meter
-    total_active_energy:
-      name: SelecEM2M Total Active Energy
-    import_active_energy:
-      name: SelecEM2M Import Active Energy
-    export_active_energy:
-      name: SelecEM2M Export Active Energy
-    total_reactive_energy:
-      name: SelecEM2M Total Reactive Energy
-    import_reactive_energy:
-      name: SelecEM2M Import Reactive Energy
-    export_reactive_energy:
-      name: SelecEM2M Export Reactive Energy
-    apparent_energy:
-      name: SelecEM2M Apparent Energy
-    active_power:
-      name: SelecEM2M Active Power
-    reactive_power:
-      name: SelecEM2M Reactive Power
-    apparent_power:
-      name: SelecEM2M Apparent Power
-    voltage:
-      name: SelecEM2M Voltage
-    current:
-      name: SelecEM2M Current
-    power_factor:
-      name: SelecEM2M Power Factor
-    frequency:
-      name: SelecEM2M Frequency
-    maximum_demand_active_power:
-      name: SelecEM2M Maximum Demand Active Power
-      disabled_by_default: true
-    maximum_demand_reactive_power:
-      name: SelecEM2M Maximum Demand Reactive Power
-      disabled_by_default: true
-    maximum_demand_apparent_power:
-      name: SelecEM2M Maximum Demand Apparent Power
-      disabled_by_default: true
-
-  - id: modbus_sensortest
-    platform: modbus_controller
-    modbus_controller_id: modbus_controller_test
-    address: 0x331A
-    register_type: read
-    value_type: U_WORD
-
-  - platform: t6615
-    uart_id: uart_2
-    co2:
-      name: CO2 Sensor
-
-  - platform: sen5x
-    id: sen54
-    temperature:
-      name: Temperature
-      accuracy_decimals: 1
-    humidity:
-      name: Humidity
-      accuracy_decimals: 0
-    pm_1_0:
-      name: PM <1µm Weight concentration
-      id: pm_1_0
-      accuracy_decimals: 1
-    pm_2_5:
-      name: PM <2.5µm Weight concentration
-      id: pm_2_5
-      accuracy_decimals: 1
-    pm_4_0:
-      name: PM <4µm Weight concentration
-      id: pm_4_0
-      accuracy_decimals: 1
-    pm_10_0:
-      name: PM <10µm Weight concentration
-      id: pm_10_0
-      accuracy_decimals: 1
-    nox:
-      name: NOx
-    voc:
-      name: VOC
-      algorithm_tuning:
-        index_offset: 100
-        learning_time_offset_hours: 12
-        learning_time_gain_hours: 12
-        gating_max_duration_minutes: 180
-        std_initial: 50
-        gain_factor: 230
-    temperature_compensation:
-      offset: 0
-      normalized_offset_slope: 0
-      time_constant: 0
-    auto_cleaning_interval: 604800s
-    acceleration_mode: low
-    store_baseline: true
-    address: 0x69
-  - platform: mcp9600
-    thermocouple_type: K
-    hot_junction:
-      name: Thermocouple Temperature
-    cold_junction:
-      name: Ambient Temperature
-
-  - platform: ezo_pmp
-    current_volume_dosed:
-      name: Current Volume Dosed
-    total_volume_dosed:
-      name: Total Volume Dosed
-    absolute_total_volume_dosed:
-      name: Absolute Total Volume Dosed
-    pump_voltage:
-      name: Pump Voltage
-    last_volume_requested:
-      name: Last Volume Requested
-    max_flow_rate:
-      name: Max Flow Rate
-
-  - platform: vbus
-    model: deltasol c
-    temperature_3:
-      name: Temperature 3
-    operating_hours_1:
-      name: Operating Hours 1
-    heat_quantity:
-      name: Heat Quantity
-    time:
-      name: System Time
-
-  - platform: debug
-    free:
-      name: "Heap Free"
-    block:
-      name: "Heap Max Block"
-    loop_time:
-      name: "Loop Time"
-    psram:
-      name: "PSRAM Free"
-
-  - platform: vbus
-    model: custom
-    command: 0x100
-    source: 0x1234
-    dest: 0x10
-    sensors:
-      - id: vcustom
-        name: VBus Custom Sensor
-        lambda: return x[0] / 10.0;
-
-  - platform: kuntze
-    ph:
-      name: Kuntze pH
-    temperature:
-      name: Kuntze temperature
-
-  - platform: ade7953_i2c
-    irq_pin:
-      allow_other_uses: true
-      number: 16
-    voltage:
-      name: ADE7953 Voltage
-    current_a:
-      name: ADE7953 Current A
-    current_b:
-      name: ADE7953 Current B
-    power_factor_a:
-      name: "ADE7953 Power Factor A"
-    power_factor_b:
-      name: "ADE7953 Power Factor B"
-    apparent_power_a:
-      name: "ADE7953 Apparent Power A"
-    apparent_power_b:
-      name: "ADE7953 Apparent Power B"
-    active_power_a:
-      name: ADE7953 Active Power A
-    active_power_b:
-      name: ADE7953 Active Power B
-    reactive_power_a:
-      name: "ADE7953 Reactive Power A"
-    reactive_power_b:
-      name: "ADE7953 Reactive Power B"
-    update_interval: 1s
-
-  - platform: ade7953_spi
-    spi_id: spi_1
-    cs_pin: 04
-    irq_pin:
-      allow_other_uses: true
-      number: 16
-    voltage:
-      name: ADE7953 Voltage
-    current_a:
-      name: ADE7953 Current A
-    current_b:
-      name: ADE7953 Current B
-    power_factor_a:
-      name: "ADE7953 Power Factor A"
-    power_factor_b:
-      name: "ADE7953 Power Factor B"
-    apparent_power_a:
-      name: "ADE7953 Apparent Power A"
-    apparent_power_b:
-      name: "ADE7953 Apparent Power B"
-    active_power_a:
-      name: ADE7953 Active Power A
-    active_power_b:
-      name: ADE7953 Active Power B
-    reactive_power_a:
-      name: "ADE7953 Reactive Power A"
-    reactive_power_b:
-      name: "ADE7953 Reactive Power B"
-    update_interval: 1s
-
-script:
-  - id: automation_test
-    then:
-      - repeat:
-          count: 5
-          then:
-            - logger.log: looping!
-
-  - id: zero_repeat_test
-    then:
-      - repeat:
-          count: !lambda "return 0;"
-          then:
-            - logger.log: shouldn't see mee!
-
-switch:
-  - platform: modbus_controller
-    modbus_controller_id: modbus_controller_test
-    id: modbus_switch_test
-    register_type: coil
-    address: 2
-    bitmask: 1
-
-  - platform: tm1638
-    id: Led0
-    led: 0
-    name: TM1638Led0
-
-  - platform: tm1638
-    id: Led1
-    led: 1
-    name: TM1638Led1
-
-  - platform: tm1638
-    id: Led2
-    led: 2
-    name: TM1638Led2
-
-  - platform: tm1638
-    id: Led3
-    led: 3
-    name: TM1638Led3
-
-display:
-  - platform: tm1638
-    id: primarydisplay
-    stb_pin:
-      allow_other_uses: true
-      number: 5  # TM1638 STB
-    clk_pin: 18  # TM1638 CLK
-    dio_pin: 23  # TM1638 DIO
-    update_interval: 5s
-    intensity: 5
-    lambda: |-
-      it.print("81818181");
-
-time:
-  - platform: pcf85063
-  - platform: pcf8563
-
-text_sensor:
-  - platform: ezo_pmp
-    dosing_mode:
-      name: Dosing Mode
-    calibration_status:
-      name: Calibration Status
-      on_value:
-        - ezo_pmp.dose_volume:
-            id: hcl_pump
-            volume: 10
-        - ezo_pmp.dose_volume_over_time:
-            id: hcl_pump
-            volume: 10
-            duration: 2
-        - ezo_pmp.dose_with_constant_flow_rate:
-            id: hcl_pump
-            volume_per_minute: 10
-            duration: 2
-        - ezo_pmp.set_calibration_volume:
-            id: hcl_pump
-            volume: 10
-        - ezo_pmp.find: hcl_pump
-        - ezo_pmp.dose_continuously: hcl_pump
-        - ezo_pmp.clear_total_volume_dosed: hcl_pump
-        - ezo_pmp.clear_calibration: hcl_pump
-        - ezo_pmp.pause_dosing: hcl_pump
-        - ezo_pmp.stop_dosing: hcl_pump
-        - ezo_pmp.arbitrary_command:
-            id: hcl_pump
-            command: D,?
-
-sn74hc165:
-  id: sn74hc165_hub
-  data_pin:
-    allow_other_uses: true
-    number: GPIO12
-  clock_pin:
-    allow_other_uses: true
-    number: GPIO14
-  load_pin:
-    number: GPIO27
-  clock_inhibit_pin:
-    number: GPIO26
-  sr_count: 4
-
-matrix_keypad:
-  id: keypad
-  rows:
-    - pin:
-        allow_other_uses: true
-        number: 21
-    - pin: 19
-  columns:
-    - pin:
-        allow_other_uses: true
-        number: 17
-    - pin:
-        allow_other_uses: true
-        number: 16
-  keys: "1234"
-
-key_collector:
-  - id: reader
-    source_id: keypad
-    min_length: 4
-    max_length: 4
-
-light:
-  - platform: esp32_rmt_led_strip
-    id: led_strip
-    pin:
-      allow_other_uses: true
-      number: 13
-    num_leds: 60
-    rmt_channel: 6
-    rgb_order: GRB
-    chipset: ws2812
-  - platform: esp32_rmt_led_strip
-    id: led_strip2
-    pin:
-      allow_other_uses: true
-      number: 15
-    num_leds: 60
-    rmt_channel: 2
-    rgb_order: RGB
-    bit0_high: 100us
-    bit0_low: 100us
-    bit1_high: 100us
-    bit1_low: 100us
diff --git a/tests/test2.yaml b/tests/test2.yaml
deleted file mode 100644
index 92977697c1..0000000000
--- a/tests/test2.yaml
+++ /dev/null
@@ -1,879 +0,0 @@
----
-esphome:
-  name: $devicename
-  build_path: build/test2
-
-esp32:
-  board: esp32dev
-  flash_size: 8MB
-
-globals:
-  - id: my_global_string
-    type: std::string
-    restore_value: true
-    max_restore_data_length: 70
-    initial_value: '"DefaultValue"'
-
-substitutions:
-  devicename: test2
-
-ethernet:
-  type: LAN8720
-  mdc_pin:
-    allow_other_uses: true
-    number: GPIO23
-  mdio_pin:
-    allow_other_uses: true
-    number: GPIO25
-  clk_mode: GPIO0_IN
-  phy_addr: 0
-  power_pin:
-    allow_other_uses: true
-    number: GPIO25
-  manual_ip:
-    static_ip: 192.168.178.56
-    gateway: 192.168.178.1
-    subnet: 255.255.255.0
-  domain: .local
-
-network:
-  enable_ipv6: true
-
-mdns:
-  disabled: true
-
-api:
-
-i2c:
-  sda:
-    allow_other_uses: true
-    number: 21
-  scl:
-    allow_other_uses: true
-    number: 22
-  scan: false
-
-spi:
-  clk_pin:
-    allow_other_uses: true
-    number: GPIO21
-  mosi_pin:
-    allow_other_uses: true
-    number: GPIO22
-  miso_pin:
-    allow_other_uses: true
-    number: GPIO23
-
-uart:
-  tx_pin:
-    allow_other_uses: true
-    number: GPIO22
-  rx_pin:
-    allow_other_uses: true
-    number: GPIO23
-  baud_rate: 115200
-  # Specifically added for testing debug with no after: definition.
-  debug:
-    dummy_receiver: false
-    direction: rx
-    sequence:
-      - lambda: UARTDebug::log_hex(direction, bytes, ':');
-
-safe_mode:
-
-ota:
-  - platform: esphome
-    port: 3286
-
-logger:
-  level: DEBUG
-
-debug:
-
-deep_sleep:
-  run_duration:
-    default: 20s
-    gpio_wakeup_reason: 10s
-    touch_wakeup_reason: 15s
-  sleep_duration: 50s
-  wakeup_pin:
-    allow_other_uses: true
-    number: GPIO2
-  wakeup_pin_mode: INVERT_WAKEUP
-
-as3935_i2c:
-  irq_pin:
-    allow_other_uses: true
-    number: GPIO12
-
-mcp3008:
-  - id: mcp3008_hub
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO12
-
-output:
-  - platform: ac_dimmer
-    id: dimmer1
-    gate_pin: GPIO5
-    zero_cross_pin:
-      allow_other_uses: true
-      number: GPIO12
-
-sensor:
-  - platform: homeassistant
-    entity_id: sensor.hello_world
-    id: ha_hello_world
-  - platform: homeassistant
-    entity_id: climate.living_room
-    attribute: temperature
-    id: ha_hello_world_temperature
-  - platform: ble_rssi
-    mac_address: AC:37:43:77:5F:4C
-    name: BLE Google Home Mini RSSI value
-  - platform: ble_rssi
-    service_uuid: 11aa
-    name: BLE Test Service 16
-  - platform: ble_rssi
-    service_uuid: "11223344"
-    name: BLE Test Service 32
-  - platform: ble_rssi
-    service_uuid: 11223344-5566-7788-99aa-bbccddeeff00
-    name: BLE Test Service 128
-  - platform: ble_rssi
-    service_uuid: 11223344-5566-7788-99aa-bbccddeeff00
-    name: BLE Test iBeacon UUID
-  - platform: b_parasite
-    mac_address: F0:CA:F0:CA:01:01
-    humidity:
-      name: b-parasite Air Humidity
-    temperature:
-      name: b-parasite Air Temperature
-    moisture:
-      name: b-parasite Soil Moisture
-    battery_voltage:
-      name: b-parasite Battery Voltage
-    illuminance:
-      name: b-parasite Illuminance
-  - platform: senseair
-    id: senseair0
-    co2:
-      name: SenseAir CO2 Value
-      on_value:
-        then:
-          - senseair.background_calibration: senseair0
-          - senseair.background_calibration_result: senseair0
-          - senseair.abc_get_period: senseair0
-          - senseair.abc_enable: senseair0
-          - senseair.abc_disable: senseair0
-    update_interval: 15s
-  - platform: ruuvitag
-    mac_address: FF:56:D3:2F:7D:E8
-    humidity:
-      name: RuuviTag Humidity
-    temperature:
-      name: RuuviTag Temperature
-    pressure:
-      name: RuuviTag Pressure
-    acceleration_x:
-      name: RuuviTag Acceleration X
-    acceleration_y:
-      name: RuuviTag Acceleration Y
-    acceleration_z:
-      name: RuuviTag Acceleration Z
-    battery_voltage:
-      name: RuuviTag Battery Voltage
-    tx_power:
-      name: RuuviTag TX Power
-    movement_counter:
-      name: RuuviTag Movement Counter
-    measurement_sequence_number:
-      name: RuuviTag Measurement Sequence Number
-  - platform: as3935
-    lightning_energy:
-      name: Lightning Energy
-    distance:
-      name: Distance Storm
-  - platform: xiaomi_hhccjcy01
-    mac_address: 94:2B:FF:5C:91:61
-    temperature:
-      name: Xiaomi HHCCJCY01 Temperature
-    moisture:
-      name: Xiaomi HHCCJCY01 Moisture
-    illuminance:
-      name: Xiaomi HHCCJCY01 Illuminance
-    conductivity:
-      name: Xiaomi HHCCJCY01 Soil Conductivity
-    battery_level:
-      name: Xiaomi HHCCJCY01 Battery Level
-  - platform: xiaomi_hhccjcy10
-    mac_address: DD:25:6D:E4:FF:8F
-    temperature:
-      name: "Xiaomi HHCCJCY10 Temperature"
-    moisture:
-      name: "Xiaomi HHCCJCY10 Moisture"
-    illuminance:
-      name: "Xiaomi HHCCJCY10 Illuminance"
-    conductivity:
-      name: "Xiaomi HHCCJCY10 Soil Conductivity"
-    battery_level:
-      name: "Xiaomi HHCCJCY10 Battery Level"
-  - platform: xiaomi_lywsdcgq
-    mac_address: 7A:80:8E:19:36:BA
-    temperature:
-      name: Xiaomi LYWSDCGQ Temperature
-    humidity:
-      name: Xiaomi LYWSDCGQ Humidity
-    battery_level:
-      name: Xiaomi LYWSDCGQ Battery Level
-  - platform: xiaomi_lywsd02
-    mac_address: 3F:5B:7D:82:58:4E
-    temperature:
-      name: Xiaomi LYWSD02 Temperature
-    humidity:
-      name: Xiaomi LYWSD02 Humidity
-    battery_level:
-      name: Xiaomi LYWSD02 Battery Level
-  - platform: xiaomi_cgg1
-    mac_address: 7A:80:8E:19:36:BA
-    temperature:
-      name: Xiaomi CGG1 Temperature
-    humidity:
-      name: Xiaomi CGG1 Humidity
-    battery_level:
-      name: Xiaomi CGG1 Battery Level
-  - platform: xiaomi_gcls002
-    mac_address: 94:2B:FF:5C:91:61
-    temperature:
-      name: GCLS02 Temperature
-    moisture:
-      name: GCLS02 Moisture
-    conductivity:
-      name: GCLS02 Soil Conductivity
-    illuminance:
-      name: GCLS02 Illuminance
-  - platform: xiaomi_hhccpot002
-    mac_address: 94:2B:FF:5C:91:61
-    moisture:
-      name: HHCCPOT002 Moisture
-    conductivity:
-      name: HHCCPOT002 Soil Conductivity
-  - platform: xiaomi_lywsd03mmc
-    mac_address: A4:C1:38:4E:16:78
-    bindkey: e9efaa6873f9f9c87a5e75a5f814801c
-    temperature:
-      name: Xiaomi LYWSD03MMC Temperature
-    humidity:
-      name: Xiaomi LYWSD03MMC Humidity
-    battery_level:
-      name: Xiaomi LYWSD03MMC Battery Level
-  - platform: xiaomi_cgd1
-    mac_address: A4:C1:38:D1:61:7D
-    bindkey: c99d2313182473b38001086febf781bd
-    temperature:
-      name: Xiaomi CGD1 Temperature
-    humidity:
-      name: Xiaomi CGD1 Humidity
-    battery_level:
-      name: Xiaomi CGD1 Battery Level
-  - platform: xiaomi_jqjcy01ym
-    mac_address: 7A:80:8E:19:36:BA
-    temperature:
-      name: JQJCY01YM Temperature
-    humidity:
-      name: JQJCY01YM Humidity
-    formaldehyde:
-      name: JQJCY01YM Formaldehyde
-    battery_level:
-      name: JQJCY01YM Battery Level
-  - platform: xiaomi_mhoc303
-    mac_address: E7:50:59:32:A0:1C
-    temperature:
-      name: MHO-C303 Temperature
-    humidity:
-      name: MHO-C303 Humidity
-    battery_level:
-      name: MHO-C303 Battery Level
-  - platform: atc_mithermometer
-    mac_address: A4:C1:38:4E:16:78
-    temperature:
-      name: ATC Temperature
-    humidity:
-      name: ATC Humidity
-    battery_level:
-      name: ATC Battery-Level
-    battery_voltage:
-      name: ATC Battery-Voltage
-  - platform: pvvx_mithermometer
-    mac_address: A4:C1:38:4E:16:78
-    temperature:
-      name: PVVX Temperature
-    humidity:
-      name: PVVX Humidity
-    battery_level:
-      name: PVVX Battery-Level
-    battery_voltage:
-      name: PVVX Battery-Voltage
-  - platform: inkbird_ibsth1_mini
-    mac_address: 38:81:D7:0A:9C:11
-    temperature:
-      name: Inkbird IBS-TH1 Temperature
-    humidity:
-      name: Inkbird IBS-TH1 Humidity
-    battery_level:
-      name: Inkbird IBS-TH1 Battery Level
-  - platform: xiaomi_rtcgq02lm
-    id: motion_rtcgq02lm
-    battery_level:
-      name: Mi Motion Sensor 2 Battery level
-  - platform: ltr390
-    uv:
-      name: LTR390 UV
-    uv_index:
-      name: LTR390 UVI
-    light:
-      name: LTR390 Light
-    ambient_light:
-      name: LTR390 ALS
-    gain: X3
-    resolution: 18
-    window_correction_factor: 1.0
-    address: 0x53
-    update_interval: 60s
-  - platform: sgp4x
-    voc:
-      name: VOC Index
-      id: sgp40_voc_index
-      algorithm_tuning:
-        index_offset: 100
-        learning_time_offset_hours: 12
-        learning_time_gain_hours: 12
-        gating_max_duration_minutes: 180
-        std_initial: 50
-        gain_factor: 230
-    nox:
-      name: NOx
-      algorithm_tuning:
-        index_offset: 100
-        learning_time_offset_hours: 12
-        learning_time_gain_hours: 12
-        gating_max_duration_minutes: 180
-        std_initial: 50
-        gain_factor: 230
-    update_interval: 5s
-  - platform: mcp3008
-    update_interval: 5s
-    mcp3008_id: mcp3008_hub
-    id: freezer_temp_source
-    reference_voltage: 3.19
-    number: 0
-  - id: airthingswp
-    platform: airthings_wave_plus
-    ble_client_id: airthings01
-    update_interval: 5min
-    battery_update_interval: 12h
-    temperature:
-      name: Wave Plus Temperature
-    radon:
-      name: Wave Plus Radon
-    radon_long_term:
-      name: Wave Plus Radon Long Term
-    pressure:
-      name: Wave Plus Pressure
-    humidity:
-      name: Wave Plus Humidity
-    co2:
-      name: Wave Plus CO2
-    tvoc:
-      name: Wave Plus VOC
-    battery_voltage:
-      name: Wave Plus Battery Voltage
-  - id: airthingswm
-    platform: airthings_wave_mini
-    ble_client_id: airthingsmini01
-    update_interval: 5min
-    battery_update_interval: 12h
-    temperature:
-      name: Wave Mini Temperature
-    humidity:
-      name: Wave Mini Humidity
-    pressure:
-      name: Wave Mini Pressure
-    tvoc:
-      name: Wave Mini VOC
-    battery_voltage:
-      name: Wave Mini Battery Voltage
-  - platform: ina260
-    address: 0x40
-    current:
-      name: INA260 Current
-    power:
-      name: INA260 Power
-    bus_voltage:
-      name: INA260 Voltage
-    update_interval: 60s
-  - platform: radon_eye_rd200
-    ble_client_id: radon_eye_ble_id
-    update_interval: 10min
-    radon:
-      name: RD200 Radon
-    radon_long_term:
-      name: RD200 Radon Long Term
-  - platform: mopeka_pro_check
-    mac_address: D3:75:F2:DC:16:91
-    tank_type: CUSTOM
-    custom_distance_full: 40cm
-    custom_distance_empty: 10mm
-    temperature:
-      name: Propane test temp
-    level:
-      name: Propane test level
-    distance:
-      name: Propane test distance
-    battery_level:
-      name: Propane test battery level
-  - platform: ufire_ec
-    id: ufire_ec_board
-    ec:
-      name: Ufire EC
-    temperature_sensor: ha_hello_world_temperature
-    temperature_compensation: 20.0
-    temperature_coefficient: 0.019
-  - platform: ufire_ise
-    id: ufire_ise_board
-    temperature_sensor: ha_hello_world_temperature
-    ph:
-      name: Ufire pH
-  - platform: mics_4514
-    update_interval: 60s
-    nitrogen_dioxide:
-      name: MICS-4514 NO2
-    carbon_monoxide:
-      name: MICS-4514 CO
-    methane:
-      name: MICS-4514 CH4
-    hydrogen:
-      name: MICS-4514 H2
-    ethanol:
-      name: MICS-4514 C2H5OH
-    ammonia:
-      name: MICS-4514 NH3
-  - platform: mopeka_std_check
-    mac_address: D3:75:F2:DC:16:91
-    tank_type: CUSTOM
-    custom_distance_full: 40cm
-    custom_distance_empty: 10mm
-    temperature:
-      name: Propane test temp
-    level:
-      name: Propane test level
-    distance:
-      name: Propane test distance
-    battery_level:
-      name: Propane test battery level
-  - platform: duty_time
-    id: duty_time1
-    name: Test Duty Time
-    restore: true
-    last_time:
-      name: Test Last Duty Time Sensor
-    sensor: ha_hello_world_binary
-  - platform: duty_time
-    id: duty_time2
-    name: Test Duty Time 2
-    restore: false
-    lambda: "return true;"
-
-time:
-  - platform: homeassistant
-    on_time:
-      - at: "16:00:00"
-        then:
-          - logger.log: It's 16:00
-          - if:
-              condition:
-                - sensor.duty_time.is_running: duty_time2
-              then:
-                - sensor.duty_time.start: duty_time1
-          - if:
-              condition:
-                - sensor.duty_time.is_not_running: duty_time1
-              then:
-                - sensor.duty_time.stop: duty_time2
-          - sensor.duty_time.reset: duty_time1
-
-esp32_touch:
-  setup_mode: true
-
-binary_sensor:
-  - platform: homeassistant
-    entity_id: binary_sensor.hello_world
-    id: ha_hello_world_binary
-  - platform: homeassistant
-    entity_id: binary_sensor.hello
-    attribute: world
-    id: ha_hello_world_binary_attribute
-  - platform: ble_presence
-    mac_address: AC:37:43:77:5F:4C
-    name: ESP32 BLE Tracker Google Home Mini
-    timeout: 30s
-  - platform: ble_presence
-    service_uuid: 11aa
-    name: BLE Test Service 16 Presence
-  - platform: ble_presence
-    service_uuid: "11223344"
-    name: BLE Test Service 32 Presence
-  - platform: ble_presence
-    service_uuid: 11223344-5566-7788-99aa-bbccddeeff00
-    name: BLE Test Service 128 Presence
-  - platform: ble_presence
-    ibeacon_uuid: 11223344-5566-7788-99aa-bbccddeeff00
-    ibeacon_major: 100
-    ibeacon_minor: 1
-    name: BLE Test iBeacon Presence
-  - platform: esp32_touch
-    name: ESP32 Touch Pad GPIO27
-    pin: GPIO27
-    threshold: 1000
-  - platform: as3935
-    name: Storm Alert
-  - platform: xiaomi_mue4094rt
-    name: MUE4094RT Motion
-    mac_address: 7A:80:8E:19:36:BA
-    timeout: 5s
-  - platform: xiaomi_mjyd02yla
-    name: MJYD02YL-A Motion
-    mac_address: 50:EC:50:CD:32:02
-    bindkey: 48403ebe2d385db8d0c187f81e62cb64
-    idle_time:
-      name: MJYD02YL-A Idle Time
-    light:
-      name: MJYD02YL-A Light Status
-    battery_level:
-      name: MJYD02YL-A Battery Level
-  - platform: xiaomi_wx08zm
-    name: WX08ZM Activation State
-    mac_address: 74:a3:4a:b5:07:34
-    tablet:
-      name: WX08ZM Tablet Resource
-    battery_level:
-      name: WX08ZM Battery Level
-  - platform: xiaomi_cgpr1
-    name: CGPR1 Motion
-    mac_address: "12:34:56:12:34:56"
-    bindkey: 48403ebe2d385db8d0c187f81e62cb64
-    battery_level:
-      name: CGPR1 battery Level
-    idle_time:
-      name: CGPR1 Idle Time
-    illuminance:
-      name: CGPR1 Illuminance
-  - platform: xiaomi_rtcgq02lm
-    id: motion_rtcgq02lm
-    motion:
-      name: Mi Motion Sensor 2
-    light:
-      name: Mi Motion Sensor 2 Light
-    button:
-      name: Mi Motion Sensor 2 Button
-  - platform: gpio
-    id: gpio_set_retry_test
-    pin:
-      allow_other_uses: true
-      number: GPIO9
-    on_press:
-      then:
-        - lambda: |-
-            App.scheduler.set_retry(id(gpio_set_retry_test), "set_retry_test", 100, 3, [](const uint8_t remaining) {
-              return remaining ? RetryResult::RETRY : RetryResult::DONE; // just to reference both symbols
-            }, 5.0f);
-
-esp32_ble_tracker:
-  on_ble_advertise:
-    - mac_address:
-        - AA:BB:CC:DD:EE:FF
-        - FF:EE:DD:CC:BB:AA
-      then:
-        # yamllint disable rule:line-length
-        - lambda: !lambda |-
-            ESP_LOGD("main", "The device address (%s) exists in list", x.address_str().c_str());
-        # yamllint enable rule:line-length
-    - mac_address: AC:37:43:77:5F:4C
-      then:
-        # yamllint disable rule:line-length
-        - lambda: !lambda |-
-            ESP_LOGD("main", "The device address is %s", x.address_str().c_str());
-        # yamllint enable rule:line-length
-    - then:
-        # yamllint disable rule:line-length
-        - lambda: !lambda |-
-            ESP_LOGD("main", "The device address is %s", x.address_str().c_str());
-        # yamllint enable rule:line-length
-  on_ble_service_data_advertise:
-    - service_uuid: ABCD
-      then:
-        - lambda: !lambda |-
-            ESP_LOGD("main", "Length of service data is %i", x.size());
-  on_ble_manufacturer_data_advertise:
-    - manufacturer_id: ABCD
-      then:
-        - lambda: !lambda |-
-            ESP_LOGD("main", "Length of manufacturer data is %i", x.size());
-
-ble_client:
-  - mac_address: 01:02:03:04:05:06
-    id: airthings01
-  - mac_address: 01:02:03:04:05:06
-    id: airthingsmini01
-  - mac_address: 01:02:03:04:05:06
-    id: radon_eye_ble_id
-
-airthings_ble:
-
-radon_eye_ble:
-
-ruuvi_ble:
-
-xiaomi_ble:
-
-mopeka_ble:
-
-bluetooth_proxy:
-  active: true
-
-xiaomi_rtcgq02lm:
-  - id: motion_rtcgq02lm
-    mac_address: 01:02:03:04:05:06
-    bindkey: "48403ebe2d385db8d0c187f81e62cb64"
-
-status_led:
-  pin:
-    allow_other_uses: true
-    number: GPIO2
-
-text_sensor:
-  - platform: version
-    name: ESPHome Version
-    icon: mdi:icon
-    id: version_sensor
-    on_value:
-      - if:
-          condition:
-            - api.connected:
-          then:
-            # yamllint disable rule:line-length
-            - lambda: !lambda |-
-                ESP_LOGD("main", "The state is %s=%s", x.c_str(), id(version_sensor).state.c_str());
-            # yamllint enable rule:line-length
-      - script.execute: my_script
-      - script.execute:
-          id: my_script_with_params
-          prefix: Running my_script_with_params
-          param2: 100
-          param3: true
-      - script.execute:
-          id: my_script_with_params
-          prefix: Running my_script_with_params using lambda parameters
-          param2: !lambda return 200;
-          param3: !lambda return true;
-      - homeassistant.service:
-          service: notify.html5
-          data:
-            title: New Humidity
-          data_template:
-            message: The humidity is {{ my_variable }}%.
-          variables:
-            my_variable: |-
-              return id(version_sensor).state;
-            my_variable_str: |-
-              return "Hello World";
-      - homeassistant.service:
-          service: light.turn_on
-          data:
-            entity_id: light.my_light
-      - homeassistant.tag_scanned:
-          tag: 1234-abcd
-      - homeassistant.tag_scanned: 1234-abcd
-      - deep_sleep.enter:
-          sleep_duration: 30min
-      - deep_sleep.enter:
-          sleep_duration: !lambda "return 30 * 60 * 1000;"
-  - platform: template
-    name: Template Text Sensor
-    lambda: |-
-      return {"Hello World"};
-    filters:
-      - to_upper:
-      - to_lower:
-      - append: xyz
-      - prepend: abcd
-      - substitute:
-          - Hello -> Goodbye
-      - map:
-          - red -> green
-      - lambda: 'return {"1234"};'
-  - platform: homeassistant
-    entity_id: sensor.hello_world2
-    id: ha_hello_world2
-  - platform: homeassistant
-    entity_id: sensor.hello_world3
-    id: ha_hello_world3
-    attribute: some_attribute
-  - platform: ble_scanner
-    name: Scanner
-
-script:
-  - id: my_script
-    mode: single
-    then:
-      - lambda: 'ESP_LOGD("main", "Hello World!");'
-  - id: my_script_queued
-    mode: queued
-    max_runs: 2
-    then:
-      - lambda: 'ESP_LOGD("main", "Hello World!");'
-  - id: my_script_parallel
-    mode: parallel
-    max_runs: 2
-    then:
-      - lambda: 'ESP_LOGD("main", "Hello World!");'
-  - id: my_script_restart
-    mode: restart
-    then:
-      - lambda: 'ESP_LOGD("main", "Hello World!");'
-  - id: my_script_with_params
-    parameters:
-      prefix: string
-      param2: int
-      param3: bool
-    then:
-      - lambda: 'ESP_LOGD("main", (prefix + " Hello World!" + to_string(param2) + " " + to_string(param3)).c_str());'
-
-stepper:
-  - platform: uln2003
-    id: my_stepper
-    pin_a:
-      allow_other_uses: true
-      number: GPIO23
-    pin_b: GPIO27
-    pin_c:
-      allow_other_uses: true
-      number: GPIO25
-    pin_d: GPIO26
-    sleep_when_done: false
-    step_mode: HALF_STEP
-    max_speed: 250 steps/s
-
-    # Optional:
-    acceleration: inf
-    deceleration: inf
-
-interval:
-  interval: 5s
-  startup_delay: 10s
-  then:
-    - logger.log: Interval Run
-
-display:
-  - platform: st7789v
-    model: LILYGO_T-EMBED_170X320
-    spi_mode: mode0
-    height: 320
-    width: 170
-    offset_height: 35
-    offset_width: 0
-    dc_pin: GPIO13
-    reset_pin:
-      allow_other_uses: true
-      number: GPIO9
-
-image:
-  - id: binary_image
-    file: pnglogo.png
-    type: BINARY
-    dither: FloydSteinberg
-  - id: transparent_transparent_image
-    file: pnglogo.png
-    type: TRANSPARENT_BINARY
-  - id: rgba_image
-    file: pnglogo.png
-    type: RGBA
-    resize: 50x50
-  - id: rgb24_image
-    file: pnglogo.png
-    type: RGB24
-    use_transparency: true
-  - id: rgb565_image
-    file: pnglogo.png
-    type: RGB565
-    use_transparency: false
-  - id: web_svg_image
-    file: https://raw.githubusercontent.com/esphome/esphome-docs/a62d7ab193c1a464ed791670170c7d518189109b/images/logo.svg
-    resize: 256x48
-    type: TRANSPARENT_BINARY
-  - id: web_tiff_image
-    file: https://upload.wikimedia.org/wikipedia/commons/b/b6/SIPI_Jelly_Beans_4.1.07.tiff
-    type: RGB24
-    resize: 48x48
-  - id: web_redirect_image
-    file: https://avatars.githubusercontent.com/u/3060199?s=48&v=4
-    type: RGB24
-    resize: 48x48
-
-  - id: mdi_alert
-    file: mdi:alert-circle-outline
-    resize: 50x50
-  - id: another_alert_icon
-    file: mdi:alert-outline
-    type: BINARY
-
-graph:
-  - id: my_graph
-    sensor: ha_hello_world_temperature
-    duration: 1h
-    width: 100
-    height: 100
-
-cap1188:
-  id: cap1188_component
-  address: 0x29
-  touch_threshold: 0x20
-  allow_multiple_touches: true
-  reset_pin: 14
-
-switch:
-  - platform: template
-    name: Test BLE Write Action
-    turn_on_action:
-      - ble_client.ble_write:
-          id: airthings01
-          service_uuid: F61E3BE9-2826-A81B-970A-4D4DECFABBAE
-          characteristic_uuid: 6490FAFE-0734-732C-8705-91B653A081FC
-          value: [0x01, 0xab, 0xff]
-      - ble_client.ble_write:
-          id: airthings01
-          service_uuid: F61E3BE9-2826-A81B-970A-4D4DECFABBAE
-          characteristic_uuid: 6490FAFE-0734-732C-8705-91B653A081FC
-          value: !lambda |-
-            return {0x13, 0x37};
-
-esp32_ble_server:
-  id: ble
-  manufacturer_data: [0x72, 0x4, 0x00, 0x23]
-
-text:
-  - platform: template
-    name: My Text
-    id: my_text
-    min_length: 0
-    max_length: 20
-    mode: text
-    pattern: "[a-z]+"
-    optimistic: true
-    restore_value: true
-    initial_value: "Hello World"
-  - platform: copy
-    name: My Text Copy
-    id: my_text_copy
-    source_id: my_text
-    mode: password
diff --git a/tests/test3.1.yaml b/tests/test3.1.yaml
deleted file mode 100644
index c3b078fe67..0000000000
--- a/tests/test3.1.yaml
+++ /dev/null
@@ -1,734 +0,0 @@
----
-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"
-
-network:
-  enable_ipv6: true
-
-web_server:
-  port: 80
-  version: 2
-
-i2c:
-  sda:
-    allow_other_uses: true
-    number: 4
-  scl:
-    allow_other_uses: true
-    number: 5
-  scan: false
-
-spi:
-  clk_pin:
-    allow_other_uses: true
-    number: GPIO12
-  mosi_pin:
-    allow_other_uses: true
-    number: GPIO13
-  miso_pin:
-    allow_other_uses: true
-    number: GPIO14
-
-ota:
-  - platform: esphome
-    version: 2
-
-logger:
-
-debug:
-
-sensor:
-  - platform: apds9960
-    type: proximity
-    name: APDS9960 Proximity
-  - platform: vl53l0x
-    name: VL53L0x Distance
-    address: 0x29
-    update_interval: 60s
-    enable_pin:
-      allow_other_uses: true
-      number: 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
-      - timeout: 10min
-      - timeout:
-          timeout: 10min
-          value: 0
-      - calibrate_linear:
-          method: exact
-          datapoints:
-            - -1 -> 3
-            - 0.0 -> 1.0
-            - 1.0 -> 2.0
-            - 2.0 -> 3.0
-      - 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_i2c
-    irq_pin:
-      allow_other_uses: true
-      number: 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
-    power_factor_a:
-      name: "ADE7953 Power Factor A"
-    power_factor_b:
-      name: "ADE7953 Power Factor B"
-    apparent_power_a:
-      name: "ADE7953 Apparent Power A"
-    apparent_power_b:
-      name: "ADE7953 Apparent Power B"
-    active_power_a:
-      name: ADE7953 Active Power A
-    active_power_b:
-      name: ADE7953 Active Power B
-    reactive_power_a:
-      name: "ADE7953 Reactive Power A"
-    reactive_power_b:
-      name: "ADE7953 Reactive Power B"
-    update_interval: 1s
-
-  - platform: ade7953_spi
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO04
-    irq_pin:
-      allow_other_uses: true
-      number: GPIO16
-    voltage:
-      name: ADE7953 Voltage
-    current_a:
-      name: ADE7953 Current A
-    current_b:
-      name: ADE7953 Current B
-    power_factor_a:
-      name: "ADE7953 Power Factor A"
-    power_factor_b:
-      name: "ADE7953 Power Factor B"
-    apparent_power_a:
-      name: "ADE7953 Apparent Power A"
-    apparent_power_b:
-      name: "ADE7953 Apparent Power B"
-    active_power_a:
-      name: ADE7953 Active Power A
-    active_power_b:
-      name: ADE7953 Active Power B
-    reactive_power_a:
-      name: "ADE7953 Reactive Power A"
-    reactive_power_b:
-      name: "ADE7953 Reactive Power B"
-    update_interval: 1s
-
-  - 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
-
-  - platform: ade7880
-    irq0_pin:
-      number: GPIO13
-      allow_other_uses: true
-    irq1_pin:
-      number: GPIO5
-      allow_other_uses: true
-    reset_pin:
-      number: GPIO16
-      allow_other_uses: true
-    frequency: 60Hz
-    phase_a:
-      name: Channel A
-      voltage: Voltage
-      current: Current
-      active_power: Active Power
-      power_factor: Power Factor
-      forward_active_energy: Forward Active Energy
-      reverse_active_energy: Reverse Active Energy
-      calibration:
-        current_gain: 3116628
-        voltage_gain: -757178
-        power_gain: -1344457
-        phase_angle: 188
-    phase_b:
-      name: Channel B
-      voltage: Voltage
-      current: Current
-      active_power: Active Power
-      power_factor: Power Factor
-      forward_active_energy: Forward Active Energy
-      reverse_active_energy: Reverse Active Energy
-      calibration:
-        current_gain: 3133655
-        voltage_gain: -755235
-        power_gain: -1345638
-        phase_angle: 188
-    phase_c:
-      name: Channel C
-      voltage: Voltage
-      current: Current
-      active_power: Active Power
-      power_factor: Power Factor
-      forward_active_energy: Forward Active Energy
-      reverse_active_energy: Reverse Active Energy
-      calibration:
-        current_gain: 3111158
-        voltage_gain: -743813
-        power_gain: -1351437
-        phase_angle: 180
-    neutral:
-      name: Neutral
-      current: Current
-      calibration:
-        current_gain: 3189
-
-apds9960:
-  address: 0x20
-  update_interval: 60s
-
-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: 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:
-    allow_other_uses: true
-    number: GPIO12
-  clock_pin:
-    allow_other_uses: true
-    number: GPIO14
-  rgb_current: 20mA
-  cw_current: 60mA
-
-grove_tb6612fng:
-  id: test_motor
-  address: 0x14
-
-switch:
-  - 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:
-      allow_other_uses: true
-      number: GPIO1
-    interlock: *interlock
-  - platform: custom
-    lambda: |-
-      auto s = new CustomSwitch();
-      return {s};
-    switches:
-      - id: custom_switch
-        name: Custom Switch
-  - platform: template
-    name: open_vent
-    id: open_vent
-    optimistic: true
-    on_turn_on:
-      then:
-        - grove_tb6612fng.run:
-            channel: 1
-            speed: 255
-            direction: BACKWARD
-            id: test_motor
-
-custom_component:
-  lambda: |-
-    auto s = new CustomComponent();
-    s->set_update_interval(15000);
-    return {s};
-
-stepper:
-  - platform: uln2003
-    id: my_stepper
-    pin_a:
-      allow_other_uses: true
-      number: GPIO12
-    pin_b:
-      allow_other_uses: true
-      number: GPIO13
-    pin_c:
-      allow_other_uses: true
-      number: GPIO14
-    pin_d:
-      allow_other_uses: true
-      number: 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:
-      allow_other_uses: true
-      number: GPIO1
-    dir_pin:
-      allow_other_uses: true
-      number: 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:
-      number: D3
-    frequency: 50Hz
-  - platform: esp8266_pwm
-    id: out2
-    pin:
-      allow_other_uses: true
-      number: 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:
-      allow_other_uses: true
-      number: 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:
-      allow_other_uses: true
-      number: 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:
-    allow_other_uses: true
-    number: D2
-  scl_pin:
-    allow_other_uses: true
-    number: D1
-
-display:
-  - platform: max7219digit
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO15
-    num_chips: 4
-    rotate_chip: 0
-    intensity: 10
-    scroll_mode: STOP
-    id: my_matrix
-    lambda: |-
-      it.printdigit("hello");
-
-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:
-    allow_other_uses: true
-    number: GPIO12
-  pin_s1:
-    allow_other_uses: true
-    number: GPIO13
-  pin_s2:
-    allow_other_uses: true
-    number: GPIO14
-  pin_s3:
-    allow_other_uses: true
-    number: GPIO15
-
-adc128s102:
-  cs_pin:
-    allow_other_uses: true
-    number: GPIO12
diff --git a/tests/test3.yaml b/tests/test3.yaml
deleted file mode 100644
index d10413b142..0000000000
--- a/tests/test3.yaml
+++ /dev/null
@@ -1,1432 +0,0 @@
----
-esphome:
-  name: $device_name
-  comment: $device_comment
-  build_path: build/test3
-  on_boot:
-    - if:
-        condition:
-          - api.connected
-          - wifi.connected
-          - time.has_time
-        then:
-          - logger.log: Have time
-
-esp8266:
-  board: d1_mini
-  early_pin_init: true
-
-substitutions:
-  device_name: test3
-  device_comment: test3 device
-
-api:
-  port: 8000
-  password: pwd
-  reboot_timeout: 0min
-  encryption:
-    key: bOFFzzvfpg5DB94DuBGLXD/hMnhpDKgP9UQyBulwWVU=
-  services:
-    - service: hello_world
-      variables:
-        name: string
-      then:
-        - logger.log:
-            format: Hello World %s!
-            args:
-              - name.c_str()
-    - service: empty_service
-      then:
-        - logger.log: Service Called
-    - service: all_types
-      variables:
-        bool_: bool
-        int_: int
-        float_: float
-        string_: string
-      then:
-        - logger.log: Something happened
-    - service: array_types
-      variables:
-        bool_arr: bool[]
-        int_arr: int[]
-        float_arr: float[]
-        string_arr: string[]
-      then:
-        - logger.log:
-            # yamllint disable rule:line-length
-            format: "Bool: %s (%u), Int: %d (%u), Float: %f (%u), String: %s (%u)"
-            # yamllint enable rule:line-length
-            args:
-              - YESNO(bool_arr[0])
-              - bool_arr.size()
-              - int_arr[0]
-              - int_arr.size()
-              - float_arr[0]
-              - float_arr.size()
-              - string_arr[0].c_str()
-              - string_arr.size()
-    - service: dfplayer_next
-      then:
-        - dfplayer.play_next:
-    - service: dfplayer_previous
-      then:
-        - dfplayer.play_previous:
-    - service: dfplayer_play
-      variables:
-        file: int
-      then:
-        - dfplayer.play: !lambda "return file;"
-    - service: dfplayer_play_loop
-      variables:
-        file: int
-        loop_: bool
-      then:
-        - dfplayer.play:
-            file: !lambda "return file;"
-            loop: !lambda "return loop_;"
-    - service: dfplayer_play_folder
-      variables:
-        folder: int
-        file: int
-      then:
-        - dfplayer.play_folder:
-            folder: !lambda "return folder;"
-            file: !lambda "return file;"
-
-    - service: dfplayer_play_loo_folder
-      variables:
-        folder: int
-      then:
-        - dfplayer.play_folder:
-            folder: !lambda "return folder;"
-            loop: true
-
-    - service: dfplayer_set_device
-      variables:
-        device: int
-      then:
-        - dfplayer.set_device:
-            device: TF_CARD
-
-    - service: dfplayer_set_volume
-      variables:
-        volume: int
-      then:
-        - dfplayer.set_volume: !lambda "return volume;"
-    - service: dfplayer_set_eq
-      variables:
-        preset: int
-      then:
-        # yamllint disable rule:line-length
-        - dfplayer.set_eq: !lambda "return static_cast<dfplayer::EqPreset>(preset);"
-        # yamllint enable rule:line-length
-
-    - service: dfplayer_sleep
-      then:
-        - dfplayer.sleep
-
-    - service: dfplayer_reset
-      then:
-        - dfplayer.reset
-
-    - service: dfplayer_start
-      then:
-        - dfplayer.start
-
-    - service: dfplayer_pause
-      then:
-        - dfplayer.pause
-
-    - service: dfplayer_stop
-      then:
-        - dfplayer.stop
-
-    - service: dfplayer_random
-      then:
-        - dfplayer.random
-
-    - service: dfplayer_volume_up
-      then:
-        - dfplayer.volume_up
-
-    - service: dfplayer_volume_down
-      then:
-        - dfplayer.volume_down
-
-    - service: battery_level_percent
-      variables:
-        level_percent: int
-      then:
-        - tm1651.set_level_percent:
-            id: tm1651_battery
-            level_percent: !lambda "return level_percent;"
-    - service: battery_level
-      variables:
-        level: int
-      then:
-        - tm1651.set_level:
-            id: tm1651_battery
-            level: !lambda "return level;"
-    - service: battery_brightness
-      variables:
-        brightness: int
-      then:
-        - tm1651.set_brightness:
-            id: tm1651_battery
-            brightness: !lambda "return brightness;"
-    - service: battery_turn_on
-      then:
-        - tm1651.turn_on:
-            id: tm1651_battery
-    - service: battery_turn_on
-      then:
-        - tm1651.turn_off:
-            id: tm1651_battery
-    - service: pid_set_control_parameters
-      then:
-        - climate.pid.set_control_parameters:
-            id: pid_climate
-            kp: 1.0
-            kd: 1.0
-            ki: 1.0
-    - service: fingerprint_grow_enroll
-      variables:
-        finger_id: int
-        num_scans: int
-      then:
-        - fingerprint_grow.enroll:
-            finger_id: !lambda "return finger_id;"
-            num_scans: !lambda "return num_scans;"
-    - service: fingerprint_grow_cancel_enroll
-      then:
-        - fingerprint_grow.cancel_enroll:
-    - service: fingerprint_grow_delete
-      variables:
-        finger_id: int
-      then:
-        - fingerprint_grow.delete:
-            finger_id: !lambda "return finger_id;"
-    - service: fingerprint_grow_delete_all
-      then:
-        - fingerprint_grow.delete_all:
-
-wifi:
-  ssid: "MySSID"
-  password: "password1"
-
-network:
-  enable_ipv6: true
-
-uart:
-  - id: uart_1
-    tx_pin:
-      number: GPIO1
-      inverted: true
-      allow_other_uses: true
-    rx_pin:
-      allow_other_uses: true
-      number: GPIO3
-    baud_rate: 115200
-  - id: uart_2
-    tx_pin:
-      allow_other_uses: true
-      number: GPIO4
-    rx_pin:
-      allow_other_uses: true
-      number: GPIO5
-    baud_rate: 9600
-  - id: uart_3
-    tx_pin:
-      allow_other_uses: true
-      number: GPIO4
-    rx_pin:
-      allow_other_uses: true
-      number: GPIO5
-    baud_rate: 4800
-  - id: uart_4
-    tx_pin:
-      allow_other_uses: true
-      number: GPIO4
-    rx_pin:
-      allow_other_uses: true
-      number: GPIO5
-    baud_rate: 9600
-  - id: uart_5
-    tx_pin:
-      allow_other_uses: true
-      number: GPIO4
-    rx_pin:
-      allow_other_uses: true
-      number: GPIO5
-    baud_rate: 9600
-  - id: uart_6
-    tx_pin:
-      allow_other_uses: true
-      number: GPIO4
-    rx_pin:
-      allow_other_uses: true
-      number: GPIO5
-    baud_rate: 9600
-  - id: uart_7
-    tx_pin:
-      allow_other_uses: true
-      number: GPIO4
-    rx_pin:
-      allow_other_uses: true
-      number: GPIO5
-    baud_rate: 38400
-  - id: uart_8
-    tx_pin:
-      allow_other_uses: true
-      number: GPIO4
-    rx_pin:
-      allow_other_uses: true
-      number: GPIO5
-    baud_rate: 4800
-    parity: NONE
-    stop_bits: 2
-    # Specifically added for testing debug with no options at all.
-    debug:
-  - id: uart_9
-    tx_pin:
-      allow_other_uses: true
-      number: GPIO4
-    rx_pin:
-      allow_other_uses: true
-      number: GPIO5
-    baud_rate: 9600
-  - id: uart_10
-    tx_pin:
-      allow_other_uses: true
-      number: GPIO4
-    rx_pin:
-      allow_other_uses: true
-      number: GPIO5
-    baud_rate: 9600
-  - id: uart_11
-    tx_pin:
-      allow_other_uses: true
-      number: GPIO4
-    rx_pin:
-      allow_other_uses: true
-      number: GPIO5
-    baud_rate: 9600
-  - id: uart_12
-    tx_pin:
-      allow_other_uses: true
-      number: GPIO4
-    rx_pin:
-      allow_other_uses: true
-      number: GPIO5
-    baud_rate: 9600
-
-modbus:
-  uart_id: uart_1
-
-vbus:
-  uart_id: uart_4
-
-safe_mode:
-  num_attempts: 5
-  reboot_timeout: 10min
-
-ota:
-  - platform: esphome
-    port: 3286
-
-logger:
-  hardware_uart: UART1
-  level: DEBUG
-  esp8266_store_log_strings_in_flash: true
-
-debug:
-
-improv_serial:
-  next_url: https://esphome.io/?name={{device_name}}&version={{esphome_version}}&ip={{ip_address}}
-
-deep_sleep:
-  run_duration: 20s
-  sleep_duration: 50s
-
-wled:
-
-adalight:
-
-sensor:
-  - platform: daly_bms
-    voltage:
-      name: Battery Voltage
-    current:
-      name: Battery Current
-    battery_level:
-      name: Battery Level
-    max_cell_voltage:
-      name: Max Cell Voltage
-    max_cell_voltage_number:
-      name: Max Cell Voltage Number
-    min_cell_voltage:
-      name: Min Cell Voltage
-    min_cell_voltage_number:
-      name: Min Cell Voltage Number
-    max_temperature:
-      name: Max Temperature
-    max_temperature_probe_number:
-      name: Max Temperature Probe Number
-    min_temperature:
-      name: Min Temperature
-    min_temperature_probe_number:
-      name: Min Temperature Probe Number
-    remaining_capacity:
-      name: Remaining Capacity
-    cells_number:
-      name: Cells Number
-    temperature_1:
-      name: Temperature 1
-    temperature_2:
-      name: Temperature 2
-
-  - platform: homeassistant
-    entity_id: sensor.hello_world
-    id: ha_hello_world
-
-  - platform: hydreon_rgxx
-    model: RG 9
-    uart_id: uart_6
-    id: hydreon_rg9
-    moisture:
-      name: hydreon_rain
-      id: hydreon_rain
-    temperature:
-      name: hydreon_temperature
-    disable_led: true
-
-  - platform: hydreon_rgxx
-    model: RG_15
-    uart_id: uart_6
-    acc:
-      name: hydreon_acc
-    event_acc:
-      name: hydreon_event_acc
-    total_acc:
-      name: hydreon_total_acc
-    r_int:
-      name: hydreon_r_int
-    resolution: low
-
-  - platform: adc
-    pin: VCC
-    id: my_sensor
-
-  - platform: binary_sensor_map
-    name: Binary Sensor Map
-    type: group
-    channels:
-      - binary_sensor: bin1
-        value: 10.0
-      - binary_sensor: bin2
-        value: 15.0
-      - binary_sensor: bin3
-        value: 100.0
-
-  - platform: binary_sensor_map
-    name: Binary Sensor Map
-    type: sum
-    channels:
-      - binary_sensor: bin1
-        value: 10.0
-      - binary_sensor: bin2
-        value: 15.0
-      - binary_sensor: bin3
-        value: 100.0
-
-  - platform: binary_sensor_map
-    name: Binary Sensor Map
-    type: bayesian
-    prior: 0.4
-    observations:
-      - binary_sensor: bin1
-        prob_given_true: 0.9
-        prob_given_false: 0.4
-      - binary_sensor: bin2
-        prob_given_true: 0.7
-        prob_given_false: 0.05
-      - binary_sensor: bin3
-        prob_given_true: 0.8
-        prob_given_false: 0.2
-
-  - platform: bl0939
-    uart_id: uart_8
-    voltage:
-      name: BL0939 Voltage
-    current_1:
-      name: BL0939 Current 1
-    current_2:
-      name: BL0939 Current 2
-    active_power_1:
-      name: BL0939 Active Power 1
-    active_power_2:
-      name: BL0939 Active Power 2
-    energy_1:
-      name: BL0939 Energy 1
-    energy_2:
-      name: BL0939 Energy 2
-    energy_total:
-      name: BL0939 Total energy
-  - platform: bl0940
-    uart_id: uart_3
-    voltage:
-      name: BL0940 Voltage
-    current:
-      name: BL0940 Current
-    power:
-      name: BL0940 Power
-    energy:
-      name: BL0940 Energy
-    internal_temperature:
-      name: BL0940 Internal temperature
-    external_temperature:
-      name: BL0940 External temperature
-  - platform: bl0942
-    uart_id: uart_3
-    voltage:
-      name: BL0942 Voltage
-    current:
-      name: BL0942 Current
-    power:
-      name: BL0942 Power
-    energy:
-      name: BL0942 Energy
-    frequency:
-      name: BL0942 Frequency
-  - platform: pzem004t
-    uart_id: uart_3
-    voltage:
-      name: PZEM004T Voltage
-    current:
-      name: PZEM004T Current
-    power:
-      name: PZEM004T Power
-  - platform: pzemac
-    id: pzemac1
-    voltage:
-      name: PZEMAC Voltage
-    current:
-      name: PZEMAC Current
-    power:
-      name: PZEMAC Power
-    energy:
-      name: PZEMAC Energy
-    frequency:
-      name: PZEMAC Frequency
-    power_factor:
-      name: PZEMAC Power Factor
-  - platform: pzemdc
-    id: pzemdc1
-    voltage:
-      name: PZEMDC Voltage
-    current:
-      name: PZEMDC Current
-    power:
-      name: PZEMDC Power
-    energy:
-      name: PZEMDC Energy
-  - platform: pmsx003
-    uart_id: uart_9
-    type: PMSX003
-    pm_1_0:
-      name: PM 1.0 Concentration
-    pm_2_5:
-      name: PM 2.5 Concentration
-    pm_10_0:
-      name: PM 10.0 Concentration
-    pm_1_0_std:
-      name: PM 1.0 Standard Atmospher Concentration
-    pm_2_5_std:
-      name: PM 2.5 Standard Atmospher Concentration
-    pm_10_0_std:
-      name: PM 10.0 Standard Atmospher Concentration
-    pm_0_3um:
-      name: Particulate Count >0.3um
-    pm_0_5um:
-      name: Particulate Count >0.5um
-    pm_1_0um:
-      name: Particulate Count >1.0um
-    pm_2_5um:
-      name: Particulate Count >2.5um
-    pm_5_0um:
-      name: Particulate Count >5.0um
-    pm_10_0um:
-      name: Particulate Count >10.0um
-    update_interval: 30s
-  - platform: pmsx003
-    uart_id: uart_5
-    type: PMS5003T
-    pm_1_0:
-      name: PM 1.0 Concentration
-    pm_2_5:
-      name: PM 2.5 Concentration
-    pm_10_0:
-      name: PM 10.0 Concentration
-    pm_1_0_std:
-      name: PM 1.0 Standard Atmospher Concentration
-    pm_2_5_std:
-      name: PM 2.5 Standard Atmospher Concentration
-    pm_10_0_std:
-      name: PM 10.0 Standard Atmospher Concentration
-    pm_0_3um:
-      name: Particulate Count >0.3um
-    pm_0_5um:
-      name: Particulate Count >0.5um
-    pm_1_0um:
-      name: Particulate Count >1.0um
-    pm_2_5um:
-      name: Particulate Count >2.5um
-    temperature:
-      name: PMS Temperature
-    humidity:
-      name: PMS Humidity
-  - platform: pmsx003
-    uart_id: uart_6
-    type: PMS5003ST
-    pm_1_0:
-      name: PM 1.0 Concentration
-    pm_2_5:
-      name: PM 2.5 Concentration
-    pm_10_0:
-      name: PM 10.0 Concentration
-    pm_1_0_std:
-      name: PM 1.0 Standard Atmospher Concentration
-    pm_2_5_std:
-      name: PM 2.5 Standard Atmospher Concentration
-    pm_10_0_std:
-      name: PM 10.0 Standard Atmospher Concentration
-    pm_0_3um:
-      name: Particulate Count >0.3um
-    pm_0_5um:
-      name: Particulate Count >0.5um
-    pm_1_0um:
-      name: Particulate Count >1.0um
-    pm_2_5um:
-      name: Particulate Count >2.5um
-    pm_5_0um:
-      name: Particulate Count >5.0um
-    pm_10_0um:
-      name: Particulate Count >10.0um
-    temperature:
-      name: PMS Temperature
-    humidity:
-      name: PMS Humidity
-    formaldehyde:
-      name: PMS Formaldehyde Concentration
-  - platform: cse7761
-    uart_id: uart_7
-    voltage:
-      name: CSE7761 Voltage
-    current_1:
-      name: CSE7761 Current 1
-    current_2:
-      name: CSE7761 Current 2
-    active_power_1:
-      name: CSE7761 Active Power 1
-    active_power_2:
-      name: CSE7761 Active Power 2
-  - platform: cse7766
-    uart_id: uart_3
-    voltage:
-      name: CSE7766 Voltage
-    current:
-      name: CSE7766 Current
-    power:
-      name: CSE7766 Power
-    apparent_power:
-      name: CSE7766 Apparent Power
-    power_factor:
-      name: CSE7766 Power Factor
-
-  - platform: fingerprint_grow
-    fingerprint_count:
-      name: Fingerprint Count
-    status:
-      name: Fingerprint Status
-    capacity:
-      name: Fingerprint Capacity
-    security_level:
-      name: Fingerprint Security Level
-    last_finger_id:
-      name: Fingerprint Last Finger ID
-    last_confidence:
-      name: Fingerprint Last Confidence
-  - platform: sdm_meter
-    phase_a:
-      current:
-        name: Phase A Current
-      voltage:
-        name: Phase A Voltage
-      active_power:
-        name: Phase A Power
-      power_factor:
-        name: Phase A Power Factor
-      apparent_power:
-        name: Phase A Apparent Power
-      reactive_power:
-        name: Phase A Reactive Power
-      phase_angle:
-        name: Phase A Phase Angle
-    phase_b:
-      current:
-        name: Phase B Current
-      voltage:
-        name: Phase B Voltage
-      active_power:
-        name: Phase B Power
-      power_factor:
-        name: Phase B Power Factor
-      apparent_power:
-        name: Phase B Apparent Power
-      reactive_power:
-        name: Phase B Reactive Power
-      phase_angle:
-        name: Phase B Phase Angle
-    phase_c:
-      current:
-        name: Phase C Current
-      voltage:
-        name: Phase C Voltage
-      active_power:
-        name: Phase C Power
-      power_factor:
-        name: Phase C Power Factor
-      apparent_power:
-        name: Phase C Apparent Power
-      reactive_power:
-        name: Phase C Reactive Power
-      phase_angle:
-        name: Phase C Phase Angle
-    frequency:
-      name: Frequency
-    import_active_energy:
-      name: Import Active Energy
-    export_active_energy:
-      name: Export Active Energy
-    import_reactive_energy:
-      name: Import Reactive Energy
-    export_reactive_energy:
-      name: Export Reactive Energy
-  - platform: dsmr
-    energy_delivered_tariff1:
-      name: dsmr_energy_delivered_tariff1
-
-  - platform: nextion
-    id: testnumber
-    name: testnumber
-    variable_name: testnumber
-  - platform: nextion
-    id: testwave
-    name: testwave
-    component_id: 2
-    wave_channel_id: 1
-  - platform: smt100
-    uart_id: uart_10
-    counts:
-      name: Counts
-    dielectric_constant:
-      name: Dielectric Constant
-    temperature:
-      name: Temperature
-    moisture:
-      name: Moisture
-    voltage:
-      name: Voltage
-    update_interval: 60s
-
-  - platform: vbus
-    model: deltasol c
-    temperature_1:
-      name: Temperature 1
-
-  - platform: kuntze
-    ph:
-      name: Kuntze pH
-    temperature:
-      name: Kuntze temperature
-
-  - platform: haier
-    haier_id: haier_climate
-    compressor_current:
-      name: Haier AC compressor current
-    compressor_frequency:
-      name: Haier AC compressor frequency
-    expansion_valve_open_degree:
-      name: Haier AC expansion valve open degree
-    humidity:
-      name: Haier AC indoor humidity
-    indoor_coil_temperature:
-      name: Haier AC indoor coil temperature
-    outdoor_coil_temperature:
-      name: Haier AC outdoor coil temperature
-    outdoor_defrost_temperature:
-      name: Haier AC outdoor defrost temperature
-    outdoor_in_air_temperature:
-      name: Haier AC outdoor in air temperature
-    outdoor_out_air_temperature:
-      name: Haier AC outdoor out air temperature
-    outdoor_temperature:
-      name: Haier AC outdoor temperature
-    power:
-      name: Haier AC power
-
-time:
-  - platform: homeassistant
-
-binary_sensor:
-  - platform: daly_bms
-    charging_mos_enabled:
-      name: Charging MOS
-    discharging_mos_enabled:
-      name: Discharging MOS
-
-  - platform: homeassistant
-    entity_id: binary_sensor.hello_world
-    id: ha_hello_world_binary
-
-  - platform: fingerprint_grow
-    name: Fingerprint Enrolling
-  - platform: nextion
-    page_id: 0
-    component_id: 2
-    name: Nextion Component 2 Touch
-  - platform: nextion
-    id: r0_sensor
-    name: R0 Sensor
-    component_name: page0.r0
-
-  - platform: hydreon_rgxx
-    hydreon_rgxx_id: hydreon_rg9
-    too_cold:
-      name: rg9_toocold
-    em_sat:
-      name: rg9_emsat
-    lens_bad:
-      name: rg9_lens_bad
-
-  - platform: template
-    id: pzemac_reset_energy
-    on_press:
-      then:
-        - pzemac.reset_energy: pzemac1
-  - platform: template
-    id: pzemdc_reset_energy
-    on_press:
-      then:
-        - pzemdc.reset_energy: pzemdc1
-
-  - platform: vbus
-    model: deltasol_bs_plus
-    relay1:
-      name: Relay 1 On
-
-  - platform: gpio
-    id: bin1
-    pin:
-      allow_other_uses: true
-      number: 1
-  - platform: gpio
-    id: bin2
-    pin:
-      allow_other_uses: true
-      number: 2
-  - platform: gpio
-    id: bin3
-    pin:
-      allow_other_uses: true
-      number: 3
-
-  - platform: haier
-    haier_id: haier_climate
-    compressor_status:
-      name: Haier AC compressor status
-    defrost_status:
-      name: Haier AC defrost status
-    four_way_valve_status:
-      name: Haier AC four-way valve status
-    indoor_electric_heating_status:
-      name: Haier AC indoor electric heating status
-    indoor_fan_status:
-      name: Haier AC indoor fan status
-    outdoor_fan_status:
-      name: Haier AC outdoor fan status
-
-globals:
-  - id: my_global_string
-    type: std::string
-    initial_value: '""'
-
-remote_receiver:
-  pin:
-    allow_other_uses: true
-    number: GPIO12
-  dump: []
-
-status_led:
-  pin:
-    allow_other_uses: true
-    number: GPIO2
-
-text_sensor:
-  - platform: daly_bms
-    status:
-      name: BMS Status
-  - platform: version
-    name: ESPHome Version
-    icon: mdi:icon
-    id: version_sensor
-    on_value:
-      # yamllint disable rule:line-length
-      - lambda: !lambda |-
-          ESP_LOGD("main", "The state is %s=%s", x.c_str(), id(version_sensor).state.c_str());
-      # yamllint enable rule:line-length
-      - script.execute: my_script
-      - script.wait: my_script
-      - script.stop: my_script
-      - homeassistant.service:
-          service: notify.html5
-          data:
-            title: New Humidity
-          data_template:
-            message: The humidity is {{ my_variable }}%.
-          variables:
-            my_variable: |-
-              return id(version_sensor).state;
-  - platform: template
-    name: Template Text Sensor
-    lambda: |-
-      return {"Hello World"};
-  - platform: homeassistant
-    entity_id: sensor.hello_world2
-    id: ha_hello_world2
-  - platform: nextion
-    name: text0
-    id: text0
-    update_interval: 4s
-    component_name: text0
-  - platform: dsmr
-    identification:
-      name: dsmr_identification
-    p1_version:
-      name: dsmr_p1_version
-
-script:
-  - id: my_script
-    then:
-      - lambda: 'ESP_LOGD("main", "Hello World!");'
-
-switch:
-  - platform: gpio
-    id: gpio_switch1
-    pin:
-      allow_other_uses: true
-      number: 1
-  - platform: gpio
-    id: gpio_switch2
-    pin:
-      allow_other_uses: true
-      number: 2
-  - platform: gpio
-    id: gpio_switch3
-    pin:
-      allow_other_uses: true
-      number: 3
-
-  - platform: nextion
-    id: r0
-    name: R0 Switch
-    component_name: page0.r0
-
-climate:
-  - platform: bang_bang
-    name: Bang Bang Climate
-    sensor: ha_hello_world
-    humidity_sensor: ha_hello_world
-    default_target_temperature_low: 18°C
-    default_target_temperature_high: 24°C
-    idle_action:
-      - switch.turn_on: gpio_switch1
-    cool_action:
-      - switch.turn_on: gpio_switch2
-    heat_action:
-      - switch.turn_on: gpio_switch1
-    away_config:
-      default_target_temperature_low: 16°C
-      default_target_temperature_high: 20°C
-  - platform: thermostat
-    name: Thermostat Climate
-    sensor: ha_hello_world
-    humidity_sensor: ha_hello_world
-    preset:
-      - name: Default Preset
-        default_target_temperature_low: 18°C
-        default_target_temperature_high: 24°C
-      - name: Away
-        default_target_temperature_low: 16°C
-        default_target_temperature_high: 20°C
-    idle_action:
-      - switch.turn_on: gpio_switch1
-    cool_action:
-      - switch.turn_on: gpio_switch2
-    supplemental_cooling_action:
-      - switch.turn_on: gpio_switch3
-    heat_action:
-      - switch.turn_on: gpio_switch1
-    supplemental_heating_action:
-      - switch.turn_on: gpio_switch3
-    dry_action:
-      - switch.turn_on: gpio_switch2
-    fan_only_action:
-      - switch.turn_on: gpio_switch1
-    auto_mode:
-      - switch.turn_on: gpio_switch2
-    off_mode:
-      - switch.turn_on: gpio_switch1
-    heat_mode:
-      - switch.turn_on: gpio_switch2
-    cool_mode:
-      - switch.turn_on: gpio_switch1
-    dry_mode:
-      - switch.turn_on: gpio_switch2
-    fan_only_mode:
-      - switch.turn_on: gpio_switch1
-    fan_mode_auto_action:
-      - switch.turn_on: gpio_switch2
-    fan_mode_on_action:
-      - switch.turn_on: gpio_switch1
-    fan_mode_off_action:
-      - switch.turn_on: gpio_switch2
-    fan_mode_low_action:
-      - switch.turn_on: gpio_switch1
-    fan_mode_medium_action:
-      - switch.turn_on: gpio_switch2
-    fan_mode_high_action:
-      - switch.turn_on: gpio_switch1
-    fan_mode_middle_action:
-      - switch.turn_on: gpio_switch2
-    fan_mode_focus_action:
-      - switch.turn_on: gpio_switch1
-    fan_mode_diffuse_action:
-      - switch.turn_on: gpio_switch2
-    fan_mode_quiet_action:
-      - switch.turn_on: gpio_switch1
-    swing_off_action:
-      - switch.turn_on: gpio_switch2
-    swing_horizontal_action:
-      - switch.turn_on: gpio_switch1
-    swing_vertical_action:
-      - switch.turn_on: gpio_switch2
-    swing_both_action:
-      - switch.turn_on: gpio_switch1
-    startup_delay: true
-    supplemental_cooling_delta: 2.0
-    cool_deadband: 0.5
-    cool_overrun: 0.5
-    min_cooling_off_time: 300s
-    min_cooling_run_time: 300s
-    max_cooling_run_time: 600s
-    supplemental_heating_delta: 2.0
-    heat_deadband: 0.5
-    heat_overrun: 0.5
-    min_heating_off_time: 300s
-    min_heating_run_time: 300s
-    max_heating_run_time: 600s
-    min_fanning_off_time: 30s
-    min_fanning_run_time: 30s
-    min_fan_mode_switching_time: 15s
-    min_idle_time: 30s
-    set_point_minimum_differential: 0.5
-    fan_only_action_uses_fan_mode_timer: true
-    fan_only_cooling: true
-    fan_with_cooling: true
-    fan_with_heating: true
-  - platform: pid
-    id: pid_climate
-    name: PID Climate Controller
-    sensor: ha_hello_world
-    humidity_sensor: ha_hello_world
-    default_target_temperature: 21°C
-    heat_output: my_slow_pwm
-    control_parameters:
-      kp: 0.0
-      ki: 0.0
-      kd: 0.0
-      max_integral: 0.0
-      output_averaging_samples: 1
-      derivative_averaging_samples: 1
-    deadband_parameters:
-      threshold_high: 0.4
-      threshold_low: -2.0
-      kp_multiplier: 0.0
-      ki_multiplier: 0.0
-      kd_multiplier: 0.0
-      deadband_output_averaging_samples: 1
-  - platform: haier
-    id: haier_climate
-    protocol: hOn
-    name: Haier AC
-    uart_id: uart_12
-    wifi_signal: true
-    answer_timeout: 200ms
-    beeper: true
-    visual:
-      min_temperature: 16 °C
-      max_temperature: 30 °C
-      temperature_step:
-        target_temperature: 1
-        current_temperature: 0.5
-    supported_modes:
-      - "OFF"
-      - HEAT_COOL
-      - COOL
-      - HEAT
-      - DRY
-      - FAN_ONLY
-    supported_swing_modes:
-      - "OFF"
-      - VERTICAL
-      - HORIZONTAL
-      - BOTH
-    supported_presets:
-      - AWAY
-      - BOOST
-      - ECO
-      - SLEEP
-    on_alarm_start:
-      then:
-        - logger.log:
-            level: DEBUG
-            format: 'Alarm activated. Code: %d. Message: "%s"'
-            args: [code, message]
-    on_alarm_end:
-      then:
-        - logger.log:
-            level: DEBUG
-            format: 'Alarm deactivated. Code: %d. Message: "%s"'
-            args: [code, message]
-
-sprinkler:
-  - id: yard_sprinkler_ctrlr
-    main_switch: Yard Sprinklers
-    auto_advance_switch: Yard Sprinklers Auto Advance
-    reverse_switch: Yard Sprinklers Reverse
-    pump_start_pump_delay: 2s
-    pump_stop_valve_delay: 4s
-    pump_switch_off_during_valve_open_delay: true
-    valve_open_delay: 5s
-    valves:
-      - valve_switch: Yard Valve 0
-        enable_switch: Enable Yard Valve 0
-        pump_switch_id: gpio_switch1
-        run_duration: 10s
-        valve_switch_id: gpio_switch2
-      - valve_switch: Yard Valve 1
-        enable_switch: Enable Yard Valve 1
-        pump_switch_id: gpio_switch1
-        run_duration: 10s
-        valve_switch_id: gpio_switch2
-      - valve_switch: Yard Valve 2
-        enable_switch: Enable Yard Valve 2
-        pump_switch_id: gpio_switch1
-        run_duration: 10s
-        valve_switch_id: gpio_switch2
-  - id: garden_sprinkler_ctrlr
-    main_switch: Garden Sprinklers
-    auto_advance_switch: Garden Sprinklers Auto Advance
-    reverse_switch: Garden Sprinklers Reverse
-    valve_overlap: 5s
-    valves:
-      - valve_switch: Garden Valve 0
-        enable_switch: Enable Garden Valve 0
-        pump_switch_id: gpio_switch1
-        run_duration: 10s
-        valve_switch_id: gpio_switch2
-      - valve_switch: Garden Valve 1
-        enable_switch: Enable Garden Valve 1
-        pump_switch_id: gpio_switch1
-        run_duration: 10s
-        valve_switch_id: gpio_switch2
-
-output:
-  - platform: esp8266_pwm
-    id: out
-    pin:
-      number: D3
-    frequency: 50Hz
-  - platform: esp8266_pwm
-    id: out2
-    pin:
-      allow_other_uses: true
-      number: D4
-  - platform: slow_pwm
-    pin:
-      allow_other_uses: true
-      number: GPIO5
-    id: my_slow_pwm
-    period: 15s
-    restart_cycle_on_state_change: false
-
-e131:
-
-light:
-  - platform: neopixelbus
-    name: Neopixelbus Light
-    pin:
-      allow_other_uses: true
-      number: GPIO1
-    type: GRBW
-    variant: SK6812
-    method: ESP8266_UART0
-    num_leds: 100
-    effects:
-      - wled:
-      - adalight:
-          uart_id: uart_3
-      - e131:
-          universe: 1
-  - platform: hbridge
-    name: Icicle Lights
-    pin_a: out
-    pin_b: out2
-  - platform: sonoff_d1
-    uart_id: uart_2
-    use_rm433_remote: false
-    name: Sonoff D1 Dimmer
-    id: d1_light
-    restore_mode: RESTORE_DEFAULT_OFF
-  - platform: shelly_dimmer
-    name: "Shelly Dimmer Light"
-    power:
-      name: "Shelly Dimmer Power"
-    voltage:
-      name: "Shelly Dimmer Voltage"
-    current:
-      name: "Shelly Dimmer Current"
-    max_brightness: 500
-    firmware: "51.6"
-    uart_id: uart_11
-    nrst_pin:
-      number: 5
-      allow_other_uses: true
-    boot0_pin:
-      number: 4
-      allow_other_uses: true
-
-sim800l:
-  uart_id: uart_4
-  on_sms_received:
-    - lambda: |-
-        std::string str;
-        str = sender;
-        str = message;
-    - sim800l.send_sms:
-        message: hello you
-        recipient: "+1234"
-    - sim800l.dial:
-        recipient: "+1234"
-
-dfplayer:
-  uart_id: uart_5
-  on_finished_playback:
-    then:
-      if:
-        condition:
-          not: dfplayer.is_playing
-        then:
-          logger.log: Playback finished event
-tm1651:
-  id: tm1651_battery
-  clk_pin:
-    allow_other_uses: true
-    number: D6
-  dio_pin:
-    allow_other_uses: true
-    number: D5
-
-rf_bridge:
-  uart_id: uart_5
-  on_code_received:
-    - lambda: |-
-        uint32_t test;
-        test = data.sync;
-        test = data.low;
-        test = data.high;
-        test = data.code;
-    - rf_bridge.send_code:
-        sync: 0x1234
-        low: 0x1234
-        high: 0x1234
-        code: 0x123456
-    - rf_bridge.learn
-
-  on_advanced_code_received:
-    - lambda: |-
-        uint32_t test;
-        std::string test_code;
-        test = data.length;
-        test = data.protocol;
-        test_code = data.code;
-    - rf_bridge.start_advanced_sniffing:
-    - rf_bridge.stop_advanced_sniffing:
-    - rf_bridge.send_advanced_code:
-        length: 0x04
-        protocol: 0x01
-        code: "ABC123"
-    - rf_bridge.send_raw:
-        raw: "AAA5070008001000ABC12355"
-
-display:
-  - platform: nextion
-    uart_id: uart_1
-    tft_url: http://esphome.io/default35.tft
-    update_interval: 5s
-    on_sleep:
-      then:
-        lambda: 'ESP_LOGD("display","Display went to sleep");'
-    on_wake:
-      then:
-        lambda: 'ESP_LOGD("display","Display woke up");'
-    on_setup:
-      then:
-        lambda: 'ESP_LOGD("display","Display setup completed");'
-    on_page:
-      then:
-        lambda: 'ESP_LOGD("display","Display shows new page %u", x);'
-
-fingerprint_grow:
-  sensing_pin:
-    allow_other_uses: true
-    number: 4
-  sensor_power_pin:
-    allow_other_uses: true
-    number: 5
-    inverted: true
-  idle_period_to_sleep: 5s
-  password: 0x12FE37DC
-  new_password: 0xA65B9840
-  on_finger_scan_start:
-    - homeassistant.event:
-        event: esphome.${device_name}_fingerprint_grow_finger_scan_start
-  on_finger_scan_invalid:
-    - homeassistant.event:
-        event: esphome.${device_name}_fingerprint_grow_finger_scan_invalid
-  on_finger_scan_matched:
-    - homeassistant.event:
-        event: esphome.${device_name}_fingerprint_grow_finger_scan_matched
-        data:
-          finger_id: !lambda "return finger_id;"
-          confidence: !lambda "return confidence;"
-  on_finger_scan_unmatched:
-    - homeassistant.event:
-        event: esphome.${device_name}_fingerprint_grow_finger_scan_unmatched
-  on_finger_scan_misplaced:
-    - homeassistant.event:
-        event: esphome.${device_name}_fingerprint_grow_finger_scan_misplaced
-  on_enrollment_scan:
-    - homeassistant.event:
-        event: esphome.${device_name}_fingerprint_grow_enrollment_scan
-        data:
-          finger_id: !lambda "return finger_id;"
-          scan_num: !lambda "return scan_num;"
-  on_enrollment_done:
-    - homeassistant.event:
-        event: esphome.${device_name}_fingerprint_grow_node_enrollment_done
-        data:
-          finger_id: !lambda "return finger_id;"
-  on_enrollment_failed:
-    - homeassistant.event:
-        event: esphome.${device_name}_fingerprint_grow_enrollment_failed
-        data:
-          finger_id: !lambda "return finger_id;"
-  uart_id: uart_6
-
-dsmr:
-  decryption_key: 00112233445566778899aabbccddeeff
-  uart_id: uart_6
-  max_telegram_length: 1000
-  request_pin:
-    allow_other_uses: true
-    number: D5
-  request_interval: 20s
-  receive_timeout: 100ms
-
-daly_bms:
-  update_interval: 20s
-  uart_id: uart_1
-
-qr_code:
-  - id: homepage_qr
-    value: https://esphome.io/index.html
-
-lightwaverf:
-  read_pin:
-    number: 13
-  write_pin:
-    allow_other_uses: true
-    number: 14
-
-alarm_control_panel:
-  - platform: template
-    id: alarmcontrolpanel1
-    name: Alarm Panel
-    codes:
-      - "1234"
-    requires_code_to_arm: true
-    arming_home_time: 1s
-    arming_night_time: 1s
-    arming_away_time: 15s
-    pending_time: 15s
-    trigger_time: 30s
-    binary_sensors:
-      - input: bin1
-        bypass_armed_home: true
-        bypass_armed_night: true
-    on_state:
-      then:
-        - lambda: !lambda |-
-            ESP_LOGD("TEST", "State change %s", alarm_control_panel_state_to_string(id(alarmcontrolpanel1)->get_state()));
-  - platform: template
-    id: alarmcontrolpanel2
-    name: Alarm Panel
-    codes:
-      - "1234"
-    requires_code_to_arm: true
-    arming_home_time: 1s
-    arming_night_time: 1s
-    arming_away_time: 15s
-    pending_time: 15s
-    trigger_time: 30s
-    binary_sensors:
-      - input: bin1
-        bypass_armed_home: true
-        bypass_armed_night: true
-    on_disarmed:
-      then:
-        - logger.log: "### DISARMED ###"
-    on_pending:
-      then:
-        - logger.log: "### PENDING ###"
-    on_arming:
-      then:
-        - logger.log: "### ARMING ###"
-    on_armed_home:
-      then:
-        - logger.log: "### ARMED HOME ###"
-    on_armed_night:
-      then:
-        - logger.log: "### ARMED NIGHT ###"
-    on_armed_away:
-      then:
-        - logger.log: "### ARMED AWAY ###"
-    on_triggered:
-      then:
-        - logger.log: "### TRIGGERED ###"
-    on_cleared:
-      then:
-        - logger.log: "### CLEARED ###"
diff --git a/tests/test4.yaml b/tests/test4.yaml
deleted file mode 100644
index c9e8a27317..0000000000
--- a/tests/test4.yaml
+++ /dev/null
@@ -1,998 +0,0 @@
----
-esphome:
-  name: $devicename
-  platform: ESP32
-  board: nodemcu-32s
-  build_path: build/test4
-
-substitutions:
-  devicename: test-4
-
-ethernet:
-  type: LAN8720
-  mdc_pin:
-    allow_other_uses: true
-    number: GPIO23
-  mdio_pin:
-    allow_other_uses: true
-    number: GPIO25
-  clk_mode: GPIO0_IN
-  phy_addr: 0
-  power_pin:
-    allow_other_uses: true
-    number: GPIO25
-  manual_ip:
-    static_ip: 192.168.178.56
-    gateway: 192.168.178.1
-    subnet: 255.255.255.0
-  domain: .local
-
-network:
-  enable_ipv6: true
-
-mqtt:
-  broker: test.mosquitto.org
-  port: 1883
-  discovery: true
-  discovery_prefix: homeassistant
-  topic_prefix:
-
-api:
-
-i2c:
-  sda:
-    allow_other_uses: true
-    number: 21
-  scl:
-    allow_other_uses: true
-    number: 22
-  scan: false
-
-spi:
-  - id: spi_id_1
-    clk_pin:
-      allow_other_uses: true
-      number: GPIO21
-    mosi_pin:
-      allow_other_uses: true
-      number: GPIO22
-    miso_pin:
-      allow_other_uses: true
-      number: GPIO23
-    interface: hardware
-  - id: spi_id_2
-    clk_pin:
-      number: GPIO32
-    mosi_pin:
-      number: GPIO33
-    interface: hardware
-
-uart:
-  - id: uart115200
-    tx_pin:
-      allow_other_uses: true
-      number: GPIO22
-    rx_pin:
-      allow_other_uses: true
-      number: GPIO23
-    baud_rate: 115200
-  - id: uart9600
-    tx_pin:
-      allow_other_uses: true
-      number: GPIO25
-    rx_pin:
-      allow_other_uses: true
-      number: GPIO26
-    baud_rate: 9600
-  - id: uart_a02yyuw
-    tx_pin:
-      allow_other_uses: true
-      number: GPIO22
-    rx_pin:
-      allow_other_uses: true
-      number: GPIO23
-    baud_rate: 9600
-  - id: uart_he60r
-    tx_pin:
-      number: GPIO18
-      allow_other_uses: true
-    rx_pin:
-      number: GPIO36
-      allow_other_uses: true
-    baud_rate: 1200
-    parity: EVEN
-
-safe_mode:
-
-ota:
-  - platform: esphome
-    port: 3286
-
-logger:
-  level: DEBUG
-
-debug:
-
-web_server:
-  ota: false
-  auth:
-    username: admin
-    password: admin
-  include_internal: true
-
-time:
-  - platform: sntp
-    id: sntp_time
-
-tuya:
-  time_id: sntp_time
-  uart_id: uart115200
-  status_pin:
-    number: GPIO5
-    inverted: true
-    allow_other_uses: true
-
-select:
-  - platform: tuya
-    id: tuya_select
-    enum_datapoint: 42
-    options:
-      0: Internal
-      1: Floor
-      2: Both
-
-pipsolar:
-  id: inverter0
-  uart_id: uart115200
-
-pylontech:
-  - id: pylontech0
-    uart_id: uart115200
-  - id: pylontech1
-    uart_id: uart115200
-
-sx1509:
-  - id: sx1509_hub
-    address: 0x3E
-
-mcp3204:
-  spi_id: spi_id_1
-  cs_pin:
-    allow_other_uses: true
-    number: GPIO23
-
-dac7678:
-  address: 0x4A
-  id: dac7678_hub1
-  internal_reference: true
-
-sensor:
-  - platform: pylontech
-    pylontech_id: pylontech0
-    battery: 1
-    voltage:
-      id: pyl01_voltage
-    current:
-      id: pyl01_current
-    coulomb:
-      id: pyl01_soc
-    mos_temperature:
-      id: pyl01_mos_temperature
-  - platform: pylontech
-    pylontech_id: pylontech1
-    battery: 1
-    voltage:
-      id: pyl13_voltage
-    temperature_low:
-      id: pyl13_temperature_low
-    temperature_high:
-      id: pyl13_temperature_high
-    voltage_low:
-      id: pyl13_voltage_low
-    voltage_high:
-      id: pyl13_voltage_high
-  - platform: homeassistant
-    entity_id: sensor.hello_world
-    id: ha_hello_world
-  - platform: tuya
-    id: tuya_sensor
-    sensor_datapoint: 1
-  - platform: pipsolar
-    pipsolar_id: inverter0
-    grid_rating_voltage:
-      id: inverter0_grid_rating_voltage
-      name: inverter0_grid_rating_voltage
-    grid_rating_current:
-      id: inverter0_grid_rating_current
-      name: inverter0_grid_rating_current
-    ac_output_rating_voltage:
-      id: inverter0_ac_output_rating_voltage
-      name: inverter0_ac_output_rating_voltage
-    ac_output_rating_frequency:
-      id: inverter0_ac_output_rating_frequency
-      name: inverter0_ac_output_rating_frequency
-    ac_output_rating_current:
-      id: inverter0_ac_output_rating_current
-      name: inverter0_ac_output_rating_current
-    ac_output_rating_apparent_power:
-      id: inverter0_ac_output_rating_apparent_power
-      name: inverter0_ac_output_rating_apparent_power
-    ac_output_rating_active_power:
-      id: inverter0_ac_output_rating_active_power
-      name: inverter0_ac_output_rating_active_power
-    battery_rating_voltage:
-      id: inverter0_battery_rating_voltage
-      name: inverter0_battery_rating_voltage
-    battery_recharge_voltage:
-      id: inverter0_battery_recharge_voltage
-      name: inverter0_battery_recharge_voltage
-    battery_under_voltage:
-      id: inverter0_battery_under_voltage
-      name: inverter0_battery_under_voltage
-    battery_bulk_voltage:
-      id: inverter0_battery_bulk_voltage
-      name: inverter0_battery_bulk_voltage
-    battery_float_voltage:
-      id: inverter0_battery_float_voltage
-      name: inverter0_battery_float_voltage
-    battery_type:
-      id: inverter0_battery_type
-      name: inverter0_battery_type
-    current_max_ac_charging_current:
-      id: inverter0_current_max_ac_charging_current
-      name: inverter0_current_max_ac_charging_current
-    current_max_charging_current:
-      id: inverter0_current_max_charging_current
-      name: inverter0_current_max_charging_current
-    input_voltage_range:
-      id: inverter0_input_voltage_range
-      name: inverter0_input_voltage_range
-    output_source_priority:
-      id: inverter0_output_source_priority
-      name: inverter0_output_source_priority
-    charger_source_priority:
-      id: inverter0_charger_source_priority
-      name: inverter0_charger_source_priority
-    parallel_max_num:
-      id: inverter0_parallel_max_num
-      name: inverter0_parallel_max_num
-    machine_type:
-      id: inverter0_machine_type
-      name: inverter0_machine_type
-    topology:
-      id: inverter0_topology
-      name: inverter0_topology
-    output_mode:
-      id: inverter0_output_mode
-      name: inverter0_output_mode
-    battery_redischarge_voltage:
-      id: inverter0_battery_redischarge_voltage
-      name: inverter0_battery_redischarge_voltage
-    pv_ok_condition_for_parallel:
-      id: inverter0_pv_ok_condition_for_parallel
-      name: inverter0_pv_ok_condition_for_parallel
-    pv_power_balance:
-      id: inverter0_pv_power_balance
-      name: inverter0_pv_power_balance
-    grid_voltage:
-      id: inverter0_grid_voltage
-      name: inverter0_grid_voltage
-    grid_frequency:
-      id: inverter0_grid_frequency
-      name: inverter0_grid_frequency
-    ac_output_voltage:
-      id: inverter0_ac_output_voltage
-      name: inverter0_ac_output_voltage
-    ac_output_frequency:
-      id: inverter0_ac_output_frequency
-      name: inverter0_ac_output_frequency
-    ac_output_apparent_power:
-      id: inverter0_ac_output_apparent_power
-      name: inverter0_ac_output_apparent_power
-    ac_output_active_power:
-      id: inverter0_ac_output_active_power
-      name: inverter0_ac_output_active_power
-    output_load_percent:
-      id: inverter0_output_load_percent
-      name: inverter0_output_load_percent
-    bus_voltage:
-      id: inverter0_bus_voltage
-      name: inverter0_bus_voltage
-    battery_voltage:
-      id: inverter0_battery_voltage
-      name: inverter0_battery_voltage
-    battery_charging_current:
-      id: inverter0_battery_charging_current
-      name: inverter0_battery_charging_current
-    battery_capacity_percent:
-      id: inverter0_battery_capacity_percent
-      name: inverter0_battery_capacity_percent
-    inverter_heat_sink_temperature:
-      id: inverter0_inverter_heat_sink_temperature
-      name: inverter0_inverter_heat_sink_temperature
-    pv_input_current_for_battery:
-      id: inverter0_pv_input_current_for_battery
-      name: inverter0_pv_input_current_for_battery
-    pv_input_voltage:
-      id: inverter0_pv_input_voltage
-      name: inverter0_pv_input_voltage
-    battery_voltage_scc:
-      id: inverter0_battery_voltage_scc
-      name: inverter0_battery_voltage_scc
-    battery_discharge_current:
-      id: inverter0_battery_discharge_current
-      name: inverter0_battery_discharge_current
-    battery_voltage_offset_for_fans_on:
-      id: inverter0_battery_voltage_offset_for_fans_on
-      name: inverter0_battery_voltage_offset_for_fans_on
-    eeprom_version:
-      id: inverter0_eeprom_version
-      name: inverter0_eeprom_version
-    pv_charging_power:
-      id: inverter0_pv_charging_power
-      name: inverter0_pv_charging_power
-  - platform: hrxl_maxsonar_wr
-    name: Rainwater Tank Level
-    uart_id: uart115200
-    filters:
-      - sliding_window_moving_average:
-          window_size: 12
-          send_every: 12
-      - or:
-          - throttle: 20min
-          - delta: 0.02
-  - platform: mcp3204
-    name: MCP3204 Pin 1
-    number: 1
-    id: mcp_sensor
-  - platform: copy
-    source_id: mcp_sensor
-    name: MCP binary sensor copy
-  - platform: ufire_ec
-    id: ufire_ec_board
-    temperature:
-      name: Ufire Temperature
-    ec:
-      name: Ufire EC
-    temperature_compensation: 20.0
-    temperature_coefficient: 0.019
-  - platform: ufire_ise
-    id: ufire_ise_board
-    temperature:
-      name: Ufire Temperature
-    ph:
-      name: Ufire pH
-  - platform: a01nyub
-    id: a01nyub_sensor
-    name: "a01nyub Distance"
-    uart_id: uart9600
-    state_topic: "esphome/sensor/a01nyub_sensor/state"
-  - platform: a02yyuw
-    id: a02yyuw_sensor
-    name: "a02yyuw Distance"
-    uart_id: uart_a02yyuw
-    state_topic: "esphome/sensor/a02yyuw_sensor/state"
-
-#
-# platform sensor.apds9960 requires component apds9960
-#
-#  - platform: apds9960
-#    type: proximity
-#    name: APDS9960 Proximity
-#  - 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
-
-binary_sensor:
-  - platform: tuya
-    id: tuya_binary_sensor
-    sensor_datapoint: 1
-  - platform: pipsolar
-    pipsolar_id: inverter0
-    add_sbu_priority_version:
-      id: inverter0_add_sbu_priority_version
-      name: inverter0_add_sbu_priority_version
-    configuration_status:
-      id: inverter0_configuration_status
-      name: inverter0_configuration_status
-    scc_firmware_version:
-      id: inverter0_scc_firmware_version
-      name: inverter0_scc_firmware_version
-    load_status:
-      id: inverter0_load_status
-      name: inverter0_load_status
-    battery_voltage_to_steady_while_charging:
-      id: inverter0_battery_voltage_to_steady_while_charging
-      name: inverter0_battery_voltage_to_steady_while_charging
-    charging_status:
-      id: inverter0_charging_status
-      name: inverter0_charging_status
-    scc_charging_status:
-      id: inverter0_scc_charging_status
-      name: inverter0_scc_charging_status
-    ac_charging_status:
-      id: inverter0_ac_charging_status
-      name: inverter0_ac_charging_status
-    charging_to_floating_mode:
-      id: inverter0_charging_to_floating_mode
-      name: inverter0_charging_to_floating_mode
-    switch_on:
-      id: inverter0_switch_on
-      name: inverter0_switch_on
-    dustproof_installed:
-      id: inverter0_dustproof_installed
-      name: inverter0_dustproof_installed
-    silence_buzzer_open_buzzer:
-      id: inverter0_silence_buzzer_open_buzzer
-      name: inverter0_silence_buzzer_open_buzzer
-    overload_bypass_function:
-      id: inverter0_overload_bypass_function
-      name: inverter0_overload_bypass_function
-    lcd_escape_to_default:
-      id: inverter0_lcd_escape_to_default
-      name: inverter0_lcd_escape_to_default
-    overload_restart_function:
-      id: inverter0_overload_restart_function
-      name: inverter0_overload_restart_function
-    over_temperature_restart_function:
-      id: inverter0_over_temperature_restart_function
-      name: inverter0_over_temperature_restart_function
-    backlight_on:
-      id: inverter0_backlight_on
-      name: inverter0_backlight_on
-  - platform: template
-    id: ar1
-    lambda: "return {};"
-    filters:
-      - autorepeat:
-          - delay: 2s
-            time_off: 100ms
-            time_on: 900ms
-          - delay: 4s
-            time_off: 100ms
-            time_on: 400ms
-    on_state:
-      then:
-        - lambda: 'ESP_LOGI("ar1:", "%d", x);'
-  - platform: touchscreen
-    touchscreen_id: xpt_touchscreen
-    id: touch_key0
-    x_min: 80
-    x_max: 160
-    y_min: 106
-    y_max: 212
-    on_press:
-      - logger.log: Touched
-
-  - platform: gpio
-    name: GPIO SX1509 test
-    pin:
-      sx1509: sx1509_hub
-      number: 3
-
-  - platform: touchscreen
-    touchscreen_id: lilygo_touchscreen
-    id: touch_key1
-    x_min: 0
-    x_max: 100
-    y_min: 0
-    y_max: 100
-    on_press:
-      - logger.log: Touched
-  - platform: gt911
-    id: touch_key_911
-    index: 0
-
-  - platform: gpio
-    name: MaxIn Pin 4
-    pin:
-      max6956: max6956_1
-      number: 4
-
-      mode:
-        input: true
-        pullup: true
-      inverted: false
-
-  - platform: gpio
-    name: XL9535 Pin 0
-    pin:
-      xl9535: xl9535_hub
-      number: 0
-      mode:
-        input: true
-      inverted: false
-
-  - platform: gpio
-    name: XL9535 Pin 17
-    pin:
-      xl9535: xl9535_hub
-      number: 17
-      mode:
-        input: true
-      inverted: false
-
-climate:
-  - platform: tuya
-    id: tuya_climate
-    switch_datapoint: 1
-    target_temperature_datapoint: 3
-    current_temperature_multiplier: 0.5
-    target_temperature_multiplier: 0.5
-    reports_fahrenheit: true
-
-switch:
-  - platform: tuya
-    id: tuya_switch
-    switch_datapoint: 1
-  - platform: pipsolar
-    pipsolar_id: inverter0
-    output_source_priority_utility:
-      name: inverter0_output_source_priority_utility
-    output_source_priority_solar:
-      name: inverter0_output_source_priority_solar
-    output_source_priority_battery:
-      name: inverter0_output_source_priority_battery
-    input_voltage_range:
-      name: inverter0_input_voltage_range
-    pv_ok_condition_for_parallel:
-      name: inverter0_pv_ok_condition_for_parallel
-    pv_power_balance:
-      name: inverter0_pv_power_balance
-  - platform: copy
-    source_id: tuya_switch
-    name: Tuya Switch Copy
-
-light:
-  - platform: fastled_clockless
-    id: led_matrix_32x8
-    name: led_matrix_32x8
-    chipset: WS2812B
-    pin:
-      allow_other_uses: true
-      number: GPIO15
-    num_leds: 256
-    rgb_order: GRB
-    default_transition_length: 0s
-    color_correct: [50%, 50%, 50%]
-  - platform: tuya
-    id: tuya_light
-    switch_datapoint: 1
-    dimmer_datapoint: 2
-    min_value_datapoint: 3
-    color_temperature_datapoint: 4
-    min_value: 1
-    max_value: 100
-    cold_white_color_temperature: 153 mireds
-    warm_white_color_temperature: 500 mireds
-    gamma_correct: 1
-
-cover:
-  - platform: tuya
-    id: tuya_cover
-    position_datapoint: 2
-  - platform: copy
-    source_id: tuya_cover
-    name: Tuya Cover copy
-  - platform: he60r
-    uart_id: uart_he60r
-    id: garage_door
-    name: Garage Door
-    open_duration: 14s
-    close_duration: 14s
-
-display:
-  - platform: addressable_light
-    id: led_matrix_32x8_display
-    addressable_light_id: led_matrix_32x8
-    width: 32
-    height: 8
-    pixel_mapper: |-
-      if (x % 2 == 0) {
-        return (x * 8) + y;
-      }
-      return (x * 8) + (7 - y);
-    lambda: |-
-      Color red = Color(0xFF0000);
-      Color green = Color(0x00FF00);
-      Color blue = Color(0x0000FF);
-      it.rectangle(0, 0, it.get_width(), it.get_height(), red);
-      it.rectangle(1, 1, it.get_width()-2, it.get_height()-2, green);
-      it.rectangle(2, 2, it.get_width()-4, it.get_height()-4, blue);
-      it.rectangle(3, 3, it.get_width()-6, it.get_height()-6, red);
-      auto touch = id(ft63_touchscreen)->get_touch();
-      if (touch)  { ESP_LOGD("touch", "%d/%d", touch.value().x, touch.value().y); }
-    rotation: 0°
-    update_interval: 16ms
-
-  - platform: inkplate6
-    id: inkplate_display
-    greyscale: false
-    partial_updating: false
-    update_interval: 60s
-    display_data_1_pin:
-      number: GPIO5
-      allow_other_uses: true
-    display_data_2_pin:
-      number: GPIO18
-      allow_other_uses: true
-    display_data_3_pin:
-      number: GPIO19
-      allow_other_uses: true
-    display_data_5_pin:
-      number: GPIO25
-      allow_other_uses: true
-    display_data_4_pin:
-      number: GPIO23
-      allow_other_uses: true
-    display_data_6_pin:
-      number: GPIO26
-      allow_other_uses: true
-    display_data_7_pin:
-      number: GPIO27
-      allow_other_uses: true
-    ckv_pin:
-      number: GPIO1
-      allow_other_uses: true
-    sph_pin:
-      number: GPIO1
-      allow_other_uses: true
-    gmod_pin:
-      number: GPIO1
-      allow_other_uses: true
-    gpio0_enable_pin:
-      number: GPIO1
-      allow_other_uses: true
-    oe_pin:
-      number: GPIO1
-      allow_other_uses: true
-    spv_pin:
-      number: GPIO1
-      allow_other_uses: true
-    powerup_pin:
-      number: GPIO1
-      allow_other_uses: true
-    wakeup_pin:
-      number: GPIO1
-      allow_other_uses: true
-    vcom_pin:
-      number: GPIO1
-      allow_other_uses: true
-
-number:
-  - platform: tuya
-    id: tuya_number
-    number_datapoint: 102
-    min_value: 0
-    max_value: 17
-    step: 1
-  - platform: copy
-    source_id: tuya_number
-    name: Tuya Number Copy
-
-text_sensor:
-  - platform: pylontech
-    pylontech_id: pylontech0
-    battery: 1
-    base_state:
-      id: pyl0_base_state
-    voltage_state:
-      id: pyl0_voltage_state
-    current_state:
-      id: pyl0_current_state
-    temperature_state:
-      id: pyl0_temperature_state
-  - platform: pipsolar
-    pipsolar_id: inverter0
-    device_mode:
-      id: inverter0_device_mode
-      name: inverter0_device_mode
-    last_qpigs:
-      id: inverter0_last_qpigs
-      name: inverter0_last_qpigs
-    last_qpiri:
-      id: inverter0_last_qpiri
-      name: inverter0_last_qpiri
-    last_qmod:
-      id: inverter0_last_qmod
-      name: inverter0_last_qmod
-    last_qflag:
-      id: inverter0_last_qflag
-      name: inverter0_last_qflag
-  - platform: copy
-    source_id: inverter0_device_mode
-    name: Inverter Text Sensor Copy
-  - platform: ethernet_info
-    ip_address:
-      name: IP Address
-
-output:
-  - platform: pipsolar
-    pipsolar_id: inverter0
-    battery_recharge_voltage:
-      id: inverter0_battery_recharge_voltage_out
-  - platform: dac7678
-    dac7678_id: dac7678_hub1
-    channel: 0
-    id: dac7678_1_ch0
-  - platform: dac7678
-    dac7678_id: dac7678_hub1
-    channel: 1
-    id: dac7678_1_ch1
-  - platform: dac7678
-    dac7678_id: dac7678_hub1
-    channel: 2
-    id: dac7678_1_ch2
-  - platform: dac7678
-    dac7678_id: dac7678_hub1
-    channel: 3
-    id: dac7678_1_ch3
-  - platform: dac7678
-    dac7678_id: dac7678_hub1
-    channel: 4
-    id: dac7678_1_ch4
-  - platform: dac7678
-    dac7678_id: dac7678_hub1
-    channel: 5
-    id: dac7678_1_ch5
-  - platform: dac7678
-    dac7678_id: dac7678_hub1
-    channel: 6
-    id: dac7678_1_ch6
-  - platform: dac7678
-    dac7678_id: dac7678_hub1
-    channel: 7
-    id: dac7678_1_ch7
-esp32_camera:
-  name: ESP-32 Camera
-  data_pins:
-    - number: GPIO17
-      allow_other_uses: true
-    - number: GPIO35
-      allow_other_uses: true
-    - number: GPIO34
-    - number: GPIO5
-      allow_other_uses: true
-    - number: GPIO39
-      allow_other_uses: true
-    - number: GPIO18
-      allow_other_uses: true
-    - number: GPIO36
-      allow_other_uses: true
-    - number: GPIO19
-      allow_other_uses: true
-  vsync_pin:
-    allow_other_uses: true
-    number: GPIO22
-  href_pin:
-    allow_other_uses: true
-    number: GPIO26
-  pixel_clock_pin:
-    allow_other_uses: true
-    number: GPIO21
-  external_clock:
-    pin:
-      allow_other_uses: true
-      number: GPIO27
-    frequency: 20MHz
-  i2c_pins:
-    sda:
-      allow_other_uses: true
-      number: GPIO25
-    scl:
-      allow_other_uses: true
-      number: GPIO23
-  reset_pin:
-    allow_other_uses: true
-    number: GPIO15
-  power_down_pin:
-    allow_other_uses: true
-    number: GPIO1
-  resolution: 640x480
-  jpeg_quality: 10
-  on_image:
-    then:
-      - lambda: |-
-          ESP_LOGD("main", "image len=%d, data=%c", image.length, image.data[0]);
-
-esp32_camera_web_server:
-  - port: 8080
-    mode: stream
-  - port: 8081
-    mode: snapshot
-
-external_components:
-  - source: github://esphome/esphome@dev
-    refresh: 1d
-    components: [bh1750]
-  - source: ../esphome/components
-    components: [sntp]
-
-button:
-  - platform: restart
-    name: Restart Button
-  - platform: safe_mode
-    name: Safe Mode Button
-  - platform: shutdown
-    name: Shutdown Button
-    id: shutdown_btn
-  - platform: copy
-    source_id: shutdown_btn
-    name: Shutdown Button Copy
-
-touchscreen:
-  - platform: ektf2232
-    interrupt_pin:
-      allow_other_uses: true
-      number: GPIO36
-    rts_pin:
-      allow_other_uses: true
-      number: GPIO5
-    display: inkplate_display
-    on_touch:
-      - logger.log:
-          format: Touch at (%d, %d)
-          args: [touch.x, touch.y]
-
-  - platform: xpt2046
-    id: xpt_touchscreen
-    spi_id: spi_id_2
-    cs_pin:
-      allow_other_uses: true
-      number: GPIO17
-    interrupt_pin:
-      number: GPIO16
-    display: inkplate_display
-    update_interval: 50ms
-    threshold: 400
-    calibration:
-      x_min: 3860
-      x_max: 280
-      y_min: 340
-      y_max: 3860
-    on_touch:
-      - logger.log:
-          format: Touch at (%d, %d)
-          args: [touch.x, touch.y]
-
-  - platform: lilygo_t5_47
-    id: lilygo_touchscreen
-    interrupt_pin:
-      allow_other_uses: true
-      number: GPIO36
-    display: inkplate_display
-    on_touch:
-      - logger.log:
-          format: Touch at (%d, %d)
-          args: [touch.x, touch.y]
-  - platform: gt911
-    interrupt_pin:
-      number: GPIO3
-    display: inkplate_display
-
-  - platform: ft63x6
-    id: ft63_touchscreen
-    interrupt_pin:
-      allow_other_uses: true
-      number: GPIO39
-    reset_pin:
-      allow_other_uses: true
-      number: GPIO5
-    display: inkplate_display
-    on_touch:
-      - logger.log:
-          format: Touch at (%d, %d)
-          args: [touch.x, touch.y]
-
-i2s_audio:
-  i2s_lrclk_pin:
-    allow_other_uses: true
-    number: GPIO26
-  i2s_bclk_pin:
-    allow_other_uses: true
-    number: GPIO27
-  i2s_mclk_pin:
-    allow_other_uses: true
-    number: GPIO25
-
-media_player:
-  - platform: i2s_audio
-    name: None
-    dac_type: external
-    i2s_dout_pin:
-      allow_other_uses: true
-      number: GPIO25
-    mute_pin:
-      number: GPIO14
-    on_state:
-      - media_player.play:
-      - media_player.play_media: http://localhost/media.mp3
-      - media_player.play_media: !lambda 'return "http://localhost/media.mp3";'
-    on_idle:
-      - media_player.pause:
-    on_play:
-      - media_player.stop:
-    on_pause:
-      - media_player.toggle:
-      - wait_until:
-          media_player.is_idle:
-      - wait_until:
-          media_player.is_playing:
-      - media_player.volume_up:
-      - media_player.volume_down:
-      - media_player.volume_set: 50%
-
-prometheus:
-  include_internal: true
-  relabel:
-    ha_hello_world:
-      id: hellow_world
-      name: Hello World
-
-microphone:
-  - platform: i2s_audio
-    id: mic_id_adc
-    adc_pin:
-      allow_other_uses: true
-      number: GPIO35
-    adc_type: internal
-
-  - platform: i2s_audio
-    id: mic_id_external
-    i2s_din_pin:
-      allow_other_uses: true
-      number: GPIO23
-    adc_type: external
-    pdm: false
-
-speaker:
-  - platform: i2s_audio
-    id: speaker_id
-    dac_type: external
-    i2s_dout_pin:
-      allow_other_uses: true
-      number: GPIO25
-    mode: mono
-
-voice_assistant:
-  microphone: mic_id_external
-  speaker: speaker_id
-  on_listening:
-    - logger.log: "Voice assistant microphone listening"
-  on_start:
-    - logger.log: "Voice assistant started"
-  on_stt_end:
-    - logger.log:
-        format: "Voice assistant STT ended with result %s"
-        args: [x.c_str()]
-  on_tts_start:
-    - logger.log:
-        format: "Voice assistant TTS started with text %s"
-        args: [x.c_str()]
-  on_tts_end:
-    - logger.log:
-        format: "Voice assistant TTS ended with url %s"
-        args: [x.c_str()]
-  on_end:
-    - logger.log: "Voice assistant ended"
-  on_error:
-    - logger.log:
-        format: "Voice assistant error - code %s, message: %s"
-        args: [code.c_str(), message.c_str()]
-
-max6956:
-  - id: max6956_1
-    address: 0x40
-
-xl9535:
-  - id: xl9535_hub
-    address: 0x20
diff --git a/tests/test5.yaml b/tests/test5.yaml
deleted file mode 100644
index f7a34d5a1b..0000000000
--- a/tests/test5.yaml
+++ /dev/null
@@ -1,747 +0,0 @@
----
-esphome:
-  name: test5
-  build_path: build/test5
-  project:
-    name: esphome.test5_project
-    version: "1.0.0"
-
-esp32:
-  board: nodemcu-32s
-  framework:
-    type: esp-idf
-    advanced:
-      ignore_efuse_mac_crc: true
-
-wifi:
-  networks:
-    - ssid: "MySSID"
-      password: "password1"
-      manual_ip:
-        static_ip: 192.168.1.23
-        gateway: 192.168.1.1
-        subnet: 255.255.255.0
-
-network:
-  enable_ipv6: true
-
-api:
-
-ota:
-  - platform: esphome
-
-logger:
-
-debug:
-
-psram:
-
-uart:
-  - id: uart_1
-    tx_pin: 1
-    rx_pin: 3
-    baud_rate: 9600
-  - id: uart_2
-    tx_pin:
-      allow_other_uses: true
-      number: 17
-      inverted: true
-    rx_pin:
-      allow_other_uses: true
-      number: 16
-    baud_rate: 19200
-
-i2c:
-  sda:
-    allow_other_uses: true
-    number: 21
-  scl:
-    number: 22
-  frequency: 100khz
-
-modbus:
-  uart_id: uart_1
-  flow_control_pin:
-    allow_other_uses: true
-    number: 5
-  id: mod_bus1
-
-modbus_controller:
-  - id: modbus_controller_test
-    address: 0x2
-    modbus_id: mod_bus1
-
-mqtt:
-  broker: test.mosquitto.org
-  port: 1883
-  discovery: true
-  discovery_prefix: homeassistant
-  idf_send_async: false
-  log_topic:
-  on_message:
-    topic: testing/sensor/testing_sensor/state
-    qos: 0
-    then:
-      # yamllint disable rule:line-length
-      - lambda: |-
-          ESP_LOGD("Mqtt Test", "testing/sensor/testing_sensor/state=[%s]", x.c_str());
-      # yamllint enable rule:line-length
-
-vbus:
-  - uart_id: uart_2
-
-binary_sensor:
-  - platform: gpio
-    pin: GPIO0
-    id: io0_button
-    icon: mdi:gesture-tap-button
-
-  - platform: modbus_controller
-    modbus_controller_id: modbus_controller_test
-    id: modbus_binsensortest
-    register_type: read
-    address: 0x3200
-    bitmask: 0x80  # (bit 8)
-    lambda: "return x;"
-
-  - platform: tm1638
-    id: Button0
-    key: 0
-    filters:
-      - delayed_on: 10ms
-    on_press:
-      then:
-        - switch.turn_on: Led0
-    on_release:
-      then:
-        - switch.turn_off: Led0
-
-  - platform: tm1638
-    id: Button1
-    key: 1
-    on_press:
-      then:
-        - switch.turn_on: Led1
-    on_release:
-      then:
-        - switch.turn_off: Led1
-
-  - platform: tm1638
-    id: Button2
-    key: 2
-    on_press:
-      then:
-        - switch.turn_on: Led2
-    on_release:
-      then:
-        - switch.turn_off: Led2
-
-  - platform: tm1638
-    id: Button3
-    key: 3
-    on_press:
-      then:
-        - switch.turn_on: Led3
-    on_release:
-      then:
-        - switch.turn_off: Led3
-
-  - platform: tm1638
-    id: Button4
-    key: 4
-    on_press:
-      then:
-        - output.turn_on: Led4
-    on_release:
-      then:
-        - output.turn_off: Led4
-
-  - platform: tm1638
-    id: Button5
-    key: 5
-    on_press:
-      then:
-        - output.turn_on: Led5
-    on_release:
-      then:
-        - output.turn_off: Led5
-
-  - platform: tm1638
-    id: Button6
-    key: 6
-    on_press:
-      then:
-        - output.turn_on: Led6
-    on_release:
-      then:
-        - output.turn_off: Led6
-
-  - platform: tm1638
-    id: Button7
-    key: 7
-    on_press:
-      then:
-        - output.turn_on: Led7
-    on_release:
-      then:
-        - output.turn_off: Led7
-
-  - platform: gpio
-    id: sn74hc165_pin_0
-    pin:
-      sn74hc165: sn74hc165_hub
-      number: 0
-
-  - platform: ezo_pmp
-    pump_state:
-      name: "Pump State"
-    is_paused:
-      name: "Is Paused"
-
-  - platform: matrix_keypad
-    keypad_id: keypad
-    id: key4
-    row: 1
-    col: 1
-  - platform: matrix_keypad
-    id: key1
-    key: 1
-
-  - platform: vbus
-    model: deltasol_bs_plus
-    relay2:
-      name: Relay 2 On
-    sensor1_error:
-      name: Sensor 1 Error
-
-  - platform: vbus
-    model: custom
-    command: 0x100
-    source: 0x1234
-    dest: 0x10
-    binary_sensors:
-      - id: vcustom_b
-        name: VBus Custom Binary Sensor
-        lambda: return x[0] & 1;
-
-tlc5947:
-  data_pin:
-    number: GPIO12
-    allow_other_uses: true
-  clock_pin:
-    allow_other_uses: true
-    number: GPIO14
-  lat_pin:
-    allow_other_uses: true
-    number: GPIO15
-
-gp8403:
-  - id: gp8403_5v
-    voltage: 5V
-  - id: gp8403_10v
-    voltage: 10V
-
-output:
-  - platform: gpio
-    pin: GPIO2
-    id: built_in_led
-
-  - platform: tlc5947
-    id: output_red
-    channel: 0
-    max_power: 0.8
-
-  - platform: mcp47a1
-    id: output_mcp47a1
-
-  - platform: modbus_controller
-    modbus_controller_id: modbus_controller_test
-    id: modbus_output_test
-    lambda: |-
-      return x * 1.0 ;
-    address: 0x9001
-    value_type: U_WORD
-
-  - platform: tm1638
-    id: Led4
-    led: 4
-
-  - platform: tm1638
-    id: Led5
-    led: 5
-
-  - platform: tm1638
-    id: Led6
-    led: 6
-
-  - platform: tm1638
-    id: Led7
-    led: 7
-
-  - platform: gp8403
-    id: gp8403_output_0
-    gp8403_id: gp8403_5v
-    channel: 0
-  - platform: gp8403
-    gp8403_id: gp8403_10v
-    id: gp8403_output_1
-    channel: 1
-
-demo:
-
-esp32_ble:
-
-esp32_ble_server:
-  manufacturer: ESPHome
-  model: Test5
-
-esp32_improv:
-  authorizer: io0_button
-  authorized_duration: 1min
-  status_indicator: built_in_led
-
-ezo_pmp:
-  id: hcl_pump
-  update_interval: 1s
-
-number:
-  - platform: template
-    name: My template number
-    id: template_number_id
-    optimistic: true
-    max_value: 100
-    min_value: 0
-    step: 5
-    unit_of_measurement: "%"
-    mode: slider
-    device_class: humidity
-    on_value:
-      - logger.log:
-          format: Number changed to %f
-          args: [x]
-    set_action:
-      - logger.log:
-          format: Template Number set to %f
-          args: [x]
-      - number.set:
-          id: template_number_id
-          value: 50
-      - number.to_min: template_number_id
-      - number.to_min:
-          id: template_number_id
-      - number.to_max: template_number_id
-      - number.to_max:
-          id: template_number_id
-      - number.increment: template_number_id
-      - number.increment:
-          id: template_number_id
-          cycle: false
-      - number.decrement: template_number_id
-      - number.decrement:
-          id: template_number_id
-          cycle: false
-      - number.operation:
-          id: template_number_id
-          operation: Increment
-          cycle: false
-      - number.operation:
-          id: template_number_id
-          operation: !lambda "return NUMBER_OP_INCREMENT;"
-          cycle: !lambda "return false;"
-
-  - id: modbus_numbertest
-    platform: modbus_controller
-    modbus_controller_id: modbus_controller_test
-    name: ModbusNumber
-    address: 0x9002
-    value_type: U_WORD
-    lambda: "return  x * 1.0;"
-    write_lambda: |-
-      return x * 1.0 ;
-    multiply: 1.0
-
-select:
-  - platform: template
-    name: My template select
-    id: template_select_id
-    optimistic: true
-    initial_option: two
-    restore_value: true
-    on_value:
-      - logger.log:
-          format: Select changed to %s (index %d)"
-          args: ["x.c_str()", "i"]
-    set_action:
-      - logger.log:
-          format: Template Select set to %s
-          args: ["x.c_str()"]
-      - select.set:
-          id: template_select_id
-          option: two
-      - select.first: template_select_id
-      - select.last:
-          id: template_select_id
-      - select.previous: template_select_id
-      - select.next:
-          id: template_select_id
-          cycle: false
-      - select.operation:
-          id: template_select_id
-          operation: Previous
-          cycle: false
-      - select.operation:
-          id: template_select_id
-          operation: !lambda "return SELECT_OP_PREVIOUS;"
-          cycle: !lambda "return true;"
-      - select.set_index:
-          id: template_select_id
-          index: 1
-      - select.set_index:
-          id: template_select_id
-          index: !lambda "return 1 + 1;"
-    options:
-      - one
-      - two
-      - three
-
-  - platform: modbus_controller
-    name: Modbus Select Register 1000
-    address: 1000
-    value_type: U_WORD
-    optionsmap:
-      "Zero": 0
-      "One": 1
-      "Two": 2
-      "Three": 3
-
-sensor:
-  - platform: adc
-    id: adc_sensor_p32
-    name: ADC pin 32
-    pin: 32
-    attenuation: 11db
-    update_interval: 1s
-  - platform: internal_temperature
-    name: Internal Temperature
-    state_topic:
-  - platform: selec_meter
-    total_active_energy:
-      name: SelecEM2M Total Active Energy
-    import_active_energy:
-      name: SelecEM2M Import Active Energy
-    export_active_energy:
-      name: SelecEM2M Export Active Energy
-    total_reactive_energy:
-      name: SelecEM2M Total Reactive Energy
-    import_reactive_energy:
-      name: SelecEM2M Import Reactive Energy
-    export_reactive_energy:
-      name: SelecEM2M Export Reactive Energy
-    apparent_energy:
-      name: SelecEM2M Apparent Energy
-    active_power:
-      name: SelecEM2M Active Power
-    reactive_power:
-      name: SelecEM2M Reactive Power
-    apparent_power:
-      name: SelecEM2M Apparent Power
-    voltage:
-      name: SelecEM2M Voltage
-    current:
-      name: SelecEM2M Current
-    power_factor:
-      name: SelecEM2M Power Factor
-    frequency:
-      name: SelecEM2M Frequency
-    maximum_demand_active_power:
-      name: SelecEM2M Maximum Demand Active Power
-      disabled_by_default: true
-    maximum_demand_reactive_power:
-      name: SelecEM2M Maximum Demand Reactive Power
-      disabled_by_default: true
-    maximum_demand_apparent_power:
-      name: SelecEM2M Maximum Demand Apparent Power
-      disabled_by_default: true
-
-  - id: modbus_sensortest
-    platform: modbus_controller
-    modbus_controller_id: modbus_controller_test
-    address: 0x331A
-    register_type: read
-    value_type: U_WORD
-
-  - platform: t6615
-    uart_id: uart_2
-    co2:
-      name: CO2 Sensor
-
-  - platform: ms8607
-    temperature:
-      name: Temperature
-    humidity:
-      name: Humidity
-    pressure:
-      name: Pressure
-  - platform: ms8607
-    id: ms8607_more_config
-    temperature:
-      name: Indoor Temperature
-      accuracy_decimals: 1
-    pressure:
-      name: Indoor Pressure
-      internal: true
-    humidity:
-      name: Indoor Humidity
-      address: 0x41
-      i2c_id:
-    i2c_id:
-    address: 0x77
-    update_interval: 10min
-
-  - platform: sen5x
-    id: sen54
-    temperature:
-      name: Temperature
-      accuracy_decimals: 1
-    humidity:
-      name: Humidity
-      accuracy_decimals: 0
-    pm_1_0:
-      name: PM <1µm Weight concentration
-      id: pm_1_0
-      accuracy_decimals: 1
-    pm_2_5:
-      name: PM <2.5µm Weight concentration
-      id: pm_2_5
-      accuracy_decimals: 1
-    pm_4_0:
-      name: PM <4µm Weight concentration
-      id: pm_4_0
-      accuracy_decimals: 1
-    pm_10_0:
-      name: PM <10µm Weight concentration
-      id: pm_10_0
-      accuracy_decimals: 1
-    nox:
-      name: NOx
-    voc:
-      name: VOC
-      algorithm_tuning:
-        index_offset: 100
-        learning_time_offset_hours: 12
-        learning_time_gain_hours: 12
-        gating_max_duration_minutes: 180
-        std_initial: 50
-        gain_factor: 230
-    temperature_compensation:
-      offset: 0
-      normalized_offset_slope: 0
-      time_constant: 0
-    auto_cleaning_interval: 604800s
-    acceleration_mode: low
-    store_baseline: true
-    address: 0x69
-  - platform: mcp9600
-    thermocouple_type: K
-    hot_junction:
-      name: Thermocouple Temperature
-    cold_junction:
-      name: Ambient Temperature
-
-  - platform: ezo_pmp
-    current_volume_dosed:
-      name: Current Volume Dosed
-    total_volume_dosed:
-      name: Total Volume Dosed
-    absolute_total_volume_dosed:
-      name: Absolute Total Volume Dosed
-    pump_voltage:
-      name: Pump Voltage
-    last_volume_requested:
-      name: Last Volume Requested
-    max_flow_rate:
-      name: Max Flow Rate
-
-  - platform: vbus
-    model: deltasol c
-    temperature_3:
-      name: Temperature 3
-    operating_hours_1:
-      name: Operating Hours 1
-    heat_quantity:
-      name: Heat Quantity
-    time:
-      name: System Time
-
-  - platform: debug
-    free:
-      name: "Heap Free"
-    block:
-      name: "Heap Max Block"
-    loop_time:
-      name: "Loop Time"
-    psram:
-      name: "PSRAM Free"
-
-  - platform: vbus
-    model: custom
-    command: 0x100
-    source: 0x1234
-    dest: 0x10
-    sensors:
-      - id: vcustom
-        name: VBus Custom Sensor
-        lambda: return x[0] / 10.0;
-
-  - platform: kuntze
-    ph:
-      name: Kuntze pH
-    temperature:
-      name: Kuntze temperature
-
-script:
-  - id: automation_test
-    then:
-      - repeat:
-          count: 5
-          then:
-            - logger.log: looping!
-
-  - id: zero_repeat_test
-    then:
-      - repeat:
-          count: !lambda "return 0;"
-          then:
-            - logger.log: shouldn't see mee!
-
-switch:
-  - platform: modbus_controller
-    modbus_controller_id: modbus_controller_test
-    id: modbus_switch_test
-    register_type: coil
-    address: 2
-    bitmask: 1
-
-  - platform: tm1638
-    id: Led0
-    led: 0
-    name: TM1638Led0
-
-  - platform: tm1638
-    id: Led1
-    led: 1
-    name: TM1638Led1
-
-  - platform: tm1638
-    id: Led2
-    led: 2
-    name: TM1638Led2
-
-  - platform: tm1638
-    id: Led3
-    led: 3
-    name: TM1638Led3
-
-display:
-  - platform: tm1638
-    id: primarydisplay
-    stb_pin:
-      allow_other_uses: true
-      number: 5  # TM1638 STB
-    clk_pin: 18  # TM1638 CLK
-    dio_pin: 23  # TM1638 DIO
-    update_interval: 5s
-    intensity: 5
-    lambda: |-
-      it.print("81818181");
-
-time:
-  - platform: pcf85063
-  - platform: pcf8563
-
-text_sensor:
-  - platform: ezo_pmp
-    dosing_mode:
-      name: Dosing Mode
-    calibration_status:
-      name: Calibration Status
-      on_value:
-        - ezo_pmp.dose_volume:
-            id: hcl_pump
-            volume: 10
-        - ezo_pmp.dose_volume_over_time:
-            id: hcl_pump
-            volume: 10
-            duration: 2
-        - ezo_pmp.dose_with_constant_flow_rate:
-            id: hcl_pump
-            volume_per_minute: 10
-            duration: 2
-        - ezo_pmp.set_calibration_volume:
-            id: hcl_pump
-            volume: 10
-        - ezo_pmp.find: hcl_pump
-        - ezo_pmp.dose_continuously: hcl_pump
-        - ezo_pmp.clear_total_volume_dosed: hcl_pump
-        - ezo_pmp.clear_calibration: hcl_pump
-        - ezo_pmp.pause_dosing: hcl_pump
-        - ezo_pmp.stop_dosing: hcl_pump
-        - ezo_pmp.arbitrary_command:
-            id: hcl_pump
-            command: D,?
-
-sn74hc165:
-  id: sn74hc165_hub
-  data_pin:
-    allow_other_uses: true
-    number: GPIO12
-  clock_pin:
-    allow_other_uses: true
-    number: GPIO14
-  load_pin: GPIO27
-  clock_inhibit_pin: GPIO26
-  sr_count: 4
-
-matrix_keypad:
-  id: keypad
-  rows:
-    - pin:
-        allow_other_uses: true
-        number: 21
-    - pin: 19
-  columns:
-    - pin:
-        allow_other_uses: true
-        number: 17
-    - pin:
-        allow_other_uses: true
-        number: 16
-  keys: "1234"
-  has_pulldowns: true
-
-key_collector:
-  - id: reader
-    source_id: keypad
-    min_length: 4
-    max_length: 4
-
-light:
-  - platform: esp32_rmt_led_strip
-    id: led_strip
-    pin: 13
-    num_leds: 60
-    rmt_channel: 6
-    rgb_order: GRB
-    chipset: ws2812
-  - platform: esp32_rmt_led_strip
-    id: led_strip2
-    pin:
-      allow_other_uses: true
-      number: 15
-    num_leds: 60
-    rmt_channel: 2
-    rgb_order: RGB
-    bit0_high: 100us
-    bit0_low: 100us
-    bit1_high: 100us
-    bit1_low: 100us
diff --git a/tests/test6.yaml b/tests/test6.yaml
deleted file mode 100644
index b1103eb126..0000000000
--- a/tests/test6.yaml
+++ /dev/null
@@ -1,77 +0,0 @@
----
-esphome:
-  name: test6
-  project:
-    name: esphome.test6_project
-    version: "1.0.0"
-
-rp2040:
-  board: rpipicow
-  framework:
-    # Waiting for https://github.com/platformio/platform-raspberrypi/pull/36
-    platform_version: https://github.com/maxgerhardt/platform-raspberrypi.git
-
-wifi:
-  networks:
-    - ssid: "MySSID"
-      password: "password1"
-
-network:
-  enable_ipv6: true
-
-api:
-
-ota:
-  - platform: esphome
-
-logger:
-
-debug:
-
-binary_sensor:
-  - platform: gpio
-    pin: GPIO5
-    id: pin_5_button
-
-output:
-  - platform: gpio
-    pin: GPIO4
-    id: pin_4
-
-switch:
-  - platform: output
-    output: pin_4
-    id: pin_4_switch
-
-spi:  # Pins are for SPI1 on the RP2040 Pico-W
-  miso_pin: 8
-  clk_pin: 10
-  mosi_pin: 11
-  id: spi_0
-  interface: hardware
-
-# light:
-#  - platform: rp2040_pio_led_strip
-#    id: led_strip
-#    pin: GPIO13
-#    num_leds: 60
-#    pio: 0
-#    rgb_order: GRB
-#    chipset: WS2812
-#  - platform: rp2040_pio_led_strip
-#    id: led_strip_custom_timings
-#    pin: GPIO13
-#    num_leds: 60
-#    pio: 1
-#    rgb_order: GRB
-#    bit0_high: .1us
-#    bit0_low: 1.2us
-#    bit1_high: .69us
-#    bit1_low: .4us
-
-sensor:
-  - platform: internal_temperature
-    name: Internal Temperature
-  - platform: adc
-    pin: VCC
-    name: VSYS
diff --git a/tests/test7.yaml b/tests/test7.yaml
deleted file mode 100644
index ac193eae4e..0000000000
--- a/tests/test7.yaml
+++ /dev/null
@@ -1,27 +0,0 @@
-# Tests for ESP32-C3 boards which use toolchain-riscv32-esp
----
-wifi:
-  ssid: "ssid"
-
-network:
-  enable_ipv6: true
-
-esp32:
-  board: lolin_c3_mini
-  framework:
-    type: arduino
-
-esphome:
-  name: test7
-
-logger:
-
-debug:
-
-sensor:
-  - platform: adc
-    id: adc_sensor_p4
-    name: ADC pin 4
-    pin: 4
-    attenuation: 11db
-    update_interval: 1s
diff --git a/tests/test8.1.yaml b/tests/test8.1.yaml
deleted file mode 100644
index ab3d0d44aa..0000000000
--- a/tests/test8.1.yaml
+++ /dev/null
@@ -1,78 +0,0 @@
-# Tests for ESP32-S3 boards - IDf
----
-wifi:
-  ssid: "ssid"
-
-network:
-  enable_ipv6: true
-
-esp32:
-  board: esp32s3box
-  variant: ESP32S3
-  framework:
-    type: esp-idf
-
-esphome:
-  name: esp32-s3-test
-
-logger:
-
-debug:
-
-psram:
-
-spi:
-  - id: spi_id_1
-    type: single
-    clk_pin:
-      number: GPIO7
-      allow_other_uses: false
-    mosi_pin: GPIO6
-    interface: hardware
-spi_device:
-  id: spidev
-  data_rate: 2MHz
-  spi_id: spi_id_1
-  mode: 3
-  bit_order: lsb_first
-
-display:
-  - platform: ili9xxx
-    id: displ8
-    model: ili9342
-    cs_pin: GPIO5
-    dc_pin: GPIO4
-    reset_pin:
-      number: GPIO48
-      allow_other_uses: true
-
-i2c:
-  scl: GPIO18
-  sda: GPIO8
-
-touchscreen:
-  - platform: tt21100
-    display: displ8
-    interrupt_pin:
-      number: GPIO3
-      ignore_strapping_warning: true
-      allow_other_uses: false
-    reset_pin:
-      number: GPIO48
-      allow_other_uses: true
-
-binary_sensor:
-  - platform: tt21100
-    name: Home Button
-    index: 1
-
-sensor:
-  - platform: debug
-    free:
-      name: "Heap Free"
-    block:
-      name: "Max Block Free"
-    loop_time:
-      name: "Loop Time"
-    psram:
-      name: "PSRAM Free"
diff --git a/tests/test8.2.yaml b/tests/test8.2.yaml
deleted file mode 100644
index ae892559e5..0000000000
--- a/tests/test8.2.yaml
+++ /dev/null
@@ -1,75 +0,0 @@
-# Tests for ESP32-C3 boards - IDf
----
-wifi:
-  ssid: "ssid"
-
-network:
-  enable_ipv6: true
-
-esp32:
-  board: lolin_c3_mini
-  variant: ESP32C3
-  framework:
-    type: esp-idf
-
-esphome:
-  name: esp32-c3-test
-
-logger:
-
-debug:
-
-psram:
-
-spi:
-  - id: spi_id_1
-    clk_pin:
-      number: GPIO7
-      allow_other_uses: false
-    mosi_pin: GPIO6
-    interface: any
-
-spi_device:
-  id: spidev
-  data_rate: 2MHz
-  spi_id: spi_id_1
-  mode: 3
-  bit_order: lsb_first
-
-display:
-  - platform: ili9xxx
-    id: displ8
-    model: ili9342
-    cs_pin: GPIO5
-    dc_pin: GPIO4
-    reset_pin:
-      number: GPIO21
-
-i2c:
-  scl: GPIO18
-  sda: GPIO8
-
-touchscreen:
-  - platform: tt21100
-    display: displ8
-    interrupt_pin:
-      number: GPIO3
-      allow_other_uses: false
-    reset_pin:
-      number: GPIO20
-
-binary_sensor:
-  - platform: tt21100
-    name: Home Button
-    index: 1
-
-sensor:
-  - platform: debug
-    free:
-      name: "Heap Free"
-    block:
-      name: "Max Block Free"
-    loop_time:
-      name: "Loop Time"
-    psram:
-      name: "PSRAM Free"
diff --git a/tests/test8.yaml b/tests/test8.yaml
deleted file mode 100644
index fcc93c6154..0000000000
--- a/tests/test8.yaml
+++ /dev/null
@@ -1,125 +0,0 @@
-# Tests for ESP32-S3 boards
----
-wifi:
-  ssid: "ssid"
-
-network:
-  enable_ipv6: true
-
-esp32:
-  board: esp32s3box
-  variant: ESP32S3
-  framework:
-    type: arduino
-
-esphome:
-  name: esp32-s3-test
-
-logger:
-
-debug:
-
-psram:
-
-light:
-  - platform: neopixelbus
-    type: GRB
-    variant: WS2812
-    pin: GPIO38
-    num_leds: 1
-    id: neopixel
-    method: esp32_rmt
-    name: neopixel-enable
-    internal: false
-    restore_mode: ALWAYS_OFF
-  - platform: spi_led_strip
-    num_leds: 4
-    color_correct: [80%, 60%, 100%]
-    id: rgb_led
-    name: "RGB LED"
-    data_rate: 8MHz
-  - platform: binary
-    name: "Red Info Light"
-    output: board_info_ed
-    entity_category: diagnostic
-    restore_mode: ALWAYS_OFF
-
-spi:
-  id: spi_id_1
-  clk_pin: GPIO7
-  mosi_pin: GPIO6
-  interface: any
-
-spi_device:
-  id: spidev
-  data_rate: 2MHz
-  spi_id: spi_id_1
-  mode: 3
-  bit_order: lsb_first
-
-font:
-  - file: "gfonts://Roboto"
-    id: roboto
-    size: 20
-
-display:
-  - platform: ili9xxx
-    id: displ8
-    model: ili9342
-    cs_pin: GPIO5
-    dc_pin: GPIO4
-    reset_pin:
-      number: GPIO48
-      allow_other_uses: true
-    lambda: |-
-      it.printf(10, 100, id(roboto), Color(0x123456), COLOR_OFF, display::TextAlign::BASELINE, "%f", id(heap_free).state);
-
-i2c:
-  scl: GPIO18
-  sda: GPIO8
-
-output:
-  - platform: gpio
-    id: board_info_ed
-    pin:
-      # This pin is reserved on the ESP32S3!
-      number: 26
-      ignore_pin_validation_error: true
-
-touchscreen:
-  - platform: tt21100
-    display: displ8
-    interrupt_pin:
-      number: GPIO3
-      ignore_strapping_warning: true
-      allow_other_uses: false
-    reset_pin:
-      number: GPIO48
-      allow_other_uses: true
-
-binary_sensor:
-  - platform: tt21100
-    name: Home Button
-    index: 1
-
-sensor:
-  - platform: debug
-    free:
-      id: heap_free
-      name: "Heap Free"
-    block:
-      name: "Max Block Free"
-    loop_time:
-      name: "Loop Time"
-    psram:
-      name: "PSRAM Free"
-
-# Purposely test that `animation:` does auto-load `image:`
-# Keep the `image:` undefined.
-# image:
-
-animation:
-  - id: rgb565_animation
-    file: pnglogo.png
-    type: RGB565
-    use_transparency: false
diff --git a/tests/test9.1.yaml b/tests/test9.1.yaml
deleted file mode 100644
index 2d205ef4e6..0000000000
--- a/tests/test9.1.yaml
+++ /dev/null
@@ -1,29 +0,0 @@
-# Tests for rtl87xx boards using LibreTiny
----
-wifi:
-  ssid: "ssid"
-
-rtl87xx:
-  board: generic-rtl8710bn-2mb-788k
-
-esphome:
-  name: rtl87xx-test
-
-logger:
-
-ota:
-  - platform: esphome
-
-captive_portal:
-
-binary_sensor:
-  - platform: gpio
-    name: Home Button
-    pin: GPIO11
-
-sensor:
-  - platform: adc
-    id: adc_sensor
-    name: ADC
-    pin: PA19
-    update_interval: 1s
diff --git a/tests/test9.yaml b/tests/test9.yaml
deleted file mode 100644
index 5017ccc5ed..0000000000
--- a/tests/test9.yaml
+++ /dev/null
@@ -1,35 +0,0 @@
-# Tests for bk7xx boards using LibreTiny
----
-wifi:
-  ssid: "ssid"
-
-bk72xx:
-  board: cb2s
-
-esphome:
-  name: bk72xx-test
-
-logger:
-
-ota:
-  - platform: esphome
-
-captive_portal:
-
-binary_sensor:
-  - platform: gpio
-    name: Home Button
-    pin: GPIO24
-
-sensor:
-  - platform: adc
-    id: adc_sensor
-    name: ADC
-    pin: GPIO23
-    update_interval: 1s
-
-mqtt:
-  broker: test.mosquitto.org
-  port: 1883
-  discovery: true
-  discovery_prefix: homeassistant
diff --git a/tests/test_build_components/build_components_base.bk72xx.yaml b/tests/test_build_components/build_components_base.bk72xx-ard.yaml
similarity index 100%
rename from tests/test_build_components/build_components_base.bk72xx.yaml
rename to tests/test_build_components/build_components_base.bk72xx-ard.yaml
diff --git a/tests/test_build_components/build_components_base.esp32-c3-idf-51.yaml b/tests/test_build_components/build_components_base.esp32-c3-idf-51.yaml
new file mode 100644
index 0000000000..eb5b23a4ec
--- /dev/null
+++ b/tests/test_build_components/build_components_base.esp32-c3-idf-51.yaml
@@ -0,0 +1,19 @@
+esphome:
+  name: componenttestesp32c3idf51
+  friendly_name: $component_name
+
+esp32:
+  board: lolin_c3_mini
+  framework:
+    type: esp-idf
+    version: 5.1.2
+    platform_version: 6.5.0
+
+logger:
+  level: VERY_VERBOSE
+
+packages:
+  component_under_test: !include
+    file: $component_test_file
+    vars:
+      component_test_file: $component_test_file
diff --git a/tests/test_build_components/build_components_base.esp32-idf-51.yaml b/tests/test_build_components/build_components_base.esp32-idf-51.yaml
new file mode 100644
index 0000000000..b5e3dd6d83
--- /dev/null
+++ b/tests/test_build_components/build_components_base.esp32-idf-51.yaml
@@ -0,0 +1,19 @@
+esphome:
+  name: componenttestesp32idf51
+  friendly_name: $component_name
+
+esp32:
+  board: nodemcu-32s
+  framework:
+    type: esp-idf
+    version: 5.1.2
+    platform_version: 6.5.0
+
+logger:
+  level: VERY_VERBOSE
+
+packages:
+  component_under_test: !include
+    file: $component_test_file
+    vars:
+      component_test_file: $component_test_file
diff --git a/tests/test_build_components/build_components_base.esp32-s2-idf-51.yaml b/tests/test_build_components/build_components_base.esp32-s2-idf-51.yaml
new file mode 100644
index 0000000000..11b077509e
--- /dev/null
+++ b/tests/test_build_components/build_components_base.esp32-s2-idf-51.yaml
@@ -0,0 +1,20 @@
+esphome:
+  name: componenttestesp32s2idf51
+  friendly_name: $component_name
+
+esp32:
+  board: esp32-s2-saola-1
+  variant: ESP32S2
+  framework:
+    type: esp-idf
+    version: 5.1.2
+    platform_version: 6.5.0
+
+logger:
+  level: VERY_VERBOSE
+
+packages:
+  component_under_test: !include
+    file: $component_test_file
+    vars:
+      component_test_file: $component_test_file
diff --git a/tests/test_build_components/build_components_base.esp32-s2-idf.yaml b/tests/test_build_components/build_components_base.esp32-s2-idf.yaml
index 62f0f4f7bc..484906e8df 100644
--- a/tests/test_build_components/build_components_base.esp32-s2-idf.yaml
+++ b/tests/test_build_components/build_components_base.esp32-s2-idf.yaml
@@ -1,5 +1,5 @@
 esphome:
-  name: componenttestesp32s2ard
+  name: componenttestesp32s2idf
   friendly_name: $component_name
 
 esp32:
diff --git a/tests/test_build_components/build_components_base.esp32-s3-idf-51.yaml b/tests/test_build_components/build_components_base.esp32-s3-idf-51.yaml
new file mode 100644
index 0000000000..4357b3581b
--- /dev/null
+++ b/tests/test_build_components/build_components_base.esp32-s3-idf-51.yaml
@@ -0,0 +1,20 @@
+esphome:
+  name: componenttestesp32s3idf51
+  friendly_name: $component_name
+
+esp32:
+  board: esp32s3box
+  variant: ESP32S3
+  framework:
+    type: esp-idf
+    version: 5.1.2
+    platform_version: 6.5.0
+
+logger:
+  level: VERY_VERBOSE
+
+packages:
+  component_under_test: !include
+    file: $component_test_file
+    vars:
+      component_test_file: $component_test_file
diff --git a/tests/test_build_components/build_components_base.esp32-s3-idf.yaml b/tests/test_build_components/build_components_base.esp32-s3-idf.yaml
index b1d08fcdf8..ee209000e9 100644
--- a/tests/test_build_components/build_components_base.esp32-s3-idf.yaml
+++ b/tests/test_build_components/build_components_base.esp32-s3-idf.yaml
@@ -1,5 +1,5 @@
 esphome:
-  name: componenttestesp32s3ard
+  name: componenttestesp32s3idf
   friendly_name: $component_name
 
 esp32:
diff --git a/tests/test_build_components/build_components_base.esp8266.yaml b/tests/test_build_components/build_components_base.esp8266-ard.yaml
similarity index 87%
rename from tests/test_build_components/build_components_base.esp8266.yaml
rename to tests/test_build_components/build_components_base.esp8266-ard.yaml
index ecf9acd2ba..e4d6607c86 100644
--- a/tests/test_build_components/build_components_base.esp8266.yaml
+++ b/tests/test_build_components/build_components_base.esp8266-ard.yaml
@@ -1,5 +1,5 @@
 esphome:
-  name: componenttestesp8266
+  name: componenttestesp8266ard
   friendly_name: $component_name
 
 esp8266:
diff --git a/tests/test_build_components/build_components_base.rp2040.yaml b/tests/test_build_components/build_components_base.rp2040-ard.yaml
similarity index 92%
rename from tests/test_build_components/build_components_base.rp2040.yaml
rename to tests/test_build_components/build_components_base.rp2040-ard.yaml
index 335642374b..6c6a27e0a7 100644
--- a/tests/test_build_components/build_components_base.rp2040.yaml
+++ b/tests/test_build_components/build_components_base.rp2040-ard.yaml
@@ -1,5 +1,5 @@
 esphome:
-  name: componenttestrp2040
+  name: componenttestrp2040ard
   friendly_name: $component_name
 
 rp2040: